Товарищи, вот скажите, можно ли как-нибудь полусить адрес функции-шаблона? Т.е., например есть:
template<class N> void Function(const N &_n){/*...*/}
Нужно получить &Function. Так просто злобный C++ указателей не раздает - мол, нет еще такой функции. Вполне с ним согласен, и правда нет. Но вот после инстанцирования функция-шаблон обретает тело и, теоретически, можно узнать, где это тело начинается. Вот только как?
Отвечаю заранее, зачем это нужно.
Есть некий шаблон класса:
template<class N>
class Class
{};
Этот самый Class создает свой собственный поток (thread) через AfxBeginThread, в котором, разумеется, нужно работать с этим классом. Но! Т.к. класс представляет собой шаблон, то и рабочая функция потока должна знать тип N, то есть тоже д.б. шаблоном. Вот тут и вылезает злой карлик: AfxBeginThread нужно передать адрес функции-шаблона.
Отвечаю заранее: Труп Страуса ответа на этот вопрос не дает.
Заранее премного благодарен.
[Ответ]
Сообщение от Necromant:
Товарищи, вот скажите, можно ли как-нибудь полусить адрес функции-шаблона?
Можно, причем самым обыкновенным способом:
template<class A>
void foo(const A& a)
{
a.member();
}
Далее идет определение твоего класса:
class C {
public:
void member() const {};
};
typedef void (*PFoo)(const C& d);
Пример использования:
void bar()
{
C obj;
foo(obj);
PFoo pfoo = foo;
pfoo(obj); // или, если больше нравится, (*pfoo)(obj)
}
[Ответ]