Спецификация функции-члена в ключевом слове template
От:
Virtus
Дата: 04.03.08 10:24
Оценка:
Вопрос по шаблонам, подскажите, пожалуйста...
Мне требуется передавать в шаблонные функции указатели на функции-члены различных классов.
Причем сигнатура функций-членов классов одинаковая — это callback'и. Внутри шаблонной функции
создается объект шаблонного класса — функтор, который впоследствии при возникновении опреде-
ленного события передаст управление связанному с ним обработчику — функции-члену.
Псевдокод:
template <class T>
void CBasic::connect_activate_mouse( T* pObj, int ( T::*pMFn )( CWidget* widget, PtCallbackInfo_t* cbinfo ) ) {
connect( CB_REASON_LEFTBUTTON_UP, new TFunctor<T>( pObj, pMFn ) );
}
template <class T>
void CBasic::connect_activate_key( T* pObj, int ( T::*pMFn )( CWidget* widget, PtCallbackInfo_t* cbinfo ) ) {
connect( CB_REASON_KEY_DOWN, new TFunctor<T>( pObj, pMFn ) );
}
Хотелось бы вынести полную спецификацию функции-члена в ключевое слово template, вместо указатия
ее в параметрах функции:
template <class T, typename int ( T::*MemFn )( CWidget* widget, PtCallbackInfo_t* cbinfo ) >
void CBasic::connect_activate_mouse( T* pObj, MemFn pMFn ) {
connect( CB_REASON_LEFTBUTTON_UP, new TFunctor<T>( pObj, pMFn ) );
}
template <class T, typename int ( T::*MemFn )( CWidget* widget, PtCallbackInfo_t* cbinfo ) >
void CBasic::connect_activate_key( T* pObj, MemFn pMFn ) {
connect( CB_REASON_KEY_DOWN, new TFunctor<T>( pObj, pMFn ) );
}
Но такой вариант не компилируется...
Встречал еще такой вариант, но здесь по-моему идет речь о значении по-умолчанию:
template<typename T, typename F = bool (T::*)(CDC*)>
PaintMessageHandler(T* obj, const F& f = &T::OnDraw)
{
return PaintMessageHandler(obj, boost::bind(f, obj, _1));
}
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить