
| Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
![]() |
||
Адрес функции-шаблона (C++)
|
||
| Философия, технологии, алгоритмы! |
![]() |
|
|
Опции темы |
|
|
#1 |
|
Форумец
Сообщений: 19
Регистрация: 20.02.2005
Возраст: 43
|
Адрес функции-шаблона (C++)
Товарищи, вот скажите, можно ли как-нибудь полусить адрес функции-шаблона? Т.е., например есть:
template<class N> void Function(const N &_n){/*...*/} Нужно получить &Function. Так просто злобный C++ указателей не раздает - мол, нет еще такой функции. Вполне с ним согласен, и правда нет. Но вот после инстанцирования функция-шаблон обретает тело и, теоретически, можно узнать, где это тело начинается. Вот только как? Отвечаю заранее, зачем это нужно. Есть некий шаблон класса: template<class N> class Class {}; Этот самый Class создает свой собственный поток (thread) через AfxBeginThread, в котором, разумеется, нужно работать с этим классом. Но! Т.к. класс представляет собой шаблон, то и рабочая функция потока должна знать тип N, то есть тоже д.б. шаблоном. Вот тут и вылезает злой карлик: AfxBeginThread нужно передать адрес функции-шаблона. Отвечаю заранее: Труп Страуса ответа на этот вопрос не дает. Заранее премного благодарен. |
|
|
|
|
#2 | |
|
Registered User
Сообщений: 67
Регистрация: 08.07.2003
Возраст: 45
|
Цитата:
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) } |
|
|
|