Большой Воронежский Форум
» Программирование>Адрес функции-шаблона (C++)
Necromant 00:11 25.04.2005
Товарищи, вот скажите, можно ли как-нибудь полусить адрес функции-шаблона? Т.е., например есть:
template<class N> void Function(const N &_n){/*...*/}
Нужно получить &Function. Так просто злобный C++ указателей не раздает - мол, нет еще такой функции. Вполне с ним согласен, и правда нет. Но вот после инстанцирования функция-шаблон обретает тело и, теоретически, можно узнать, где это тело начинается. Вот только как?

Отвечаю заранее, зачем это нужно.
Есть некий шаблон класса:
template<class N>
class Class
{};

Этот самый Class создает свой собственный поток (thread) через AfxBeginThread, в котором, разумеется, нужно работать с этим классом. Но! Т.к. класс представляет собой шаблон, то и рабочая функция потока должна знать тип N, то есть тоже д.б. шаблоном. Вот тут и вылезает злой карлик: AfxBeginThread нужно передать адрес функции-шаблона.

Отвечаю заранее: Труп Страуса ответа на этот вопрос не дает.
Заранее премного благодарен. [Ответ]
Fisher 16:39 25.04.2005

Сообщение от 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)
} [Ответ]
Necromant 00:43 30.04.2005
Я уже понял, что тормозил сильно, и все сделал. Но все равно спасибо. [Ответ]
Вверх