Уважаемый ALL, прошу ответа:
template <typename _TGTCLS_T>
HRESULT SetStreamInitializationCallback(_TGTCLS_T *pCls, HRESULT (_TGTCLS_T::*pVideoCbck)(void), HRESULT (_TGTCLS_T::*pAudioCbck)(void)){
return NOERROR;
}
работает.
template <typename _TGTCLS_T, typename HRESULT (_TGTCLS_T::*_CALLBACK_T)(void)>
HRESULT SetStreamInitializationCallback(_TGTCLS_T *pCls, _CALLBACK_T pVideoCbck, _CALLBACK_T pAudioCbck){
// здесь ругается на _CALLBACK_T (error C2061: syntax error : identifier '_CALLBACK_T')
return NOERROR;
}
не работает ...
в чём может быть загвоздка?
Здравствуйте, _INDY_, Вы писали:
_IN>Уважаемый ALL, прошу ответа:
_IN>_IN> template <typename _TGTCLS_T>
_IN> HRESULT SetStreamInitializationCallback(_TGTCLS_T *pCls, HRESULT (_TGTCLS_T::*pVideoCbck)(void), HRESULT (_TGTCLS_T::*pAudioCbck)(void)){
_IN> return NOERROR;
_IN> }
_IN>
_IN>работает.
_IN>_IN> template <typename _TGTCLS_T, typename HRESULT (_TGTCLS_T::*_CALLBACK_T)(void)>
_IN> HRESULT SetStreamInitializationCallback(_TGTCLS_T *pCls, _CALLBACK_T pVideoCbck, _CALLBACK_T pAudioCbck){
_IN>// здесь ругается на _CALLBACK_T (error C2061: syntax error : identifier '_CALLBACK_T')
_IN> return NOERROR;
_IN> }
_IN>
_IN>не работает ...
_IN>в чём может быть загвоздка?
ну правильно.
по сути тут нужен typedef, тоесть вот такое
template < typename _TGTCLS_T >
struct helper
{
typedef typename HRESULT (_TGTCLS_T::*_CALLBACK_T)(void);
};
template < typename _TGTCLS_T >
HRESULT SetStreamInitializationCallback(_TGTCLS_T *pCls, typename helper<_TGTCLS_T>::_CALLBACK_T pVideoCbck, typename helper<_TGTCLS_T>::_CALLBACK_T pAudioCbck){
return NOERROR;
}
либо вообще так —
template <typename _TGTCLS_T, HRESULT (_TGTCLS_T::*_VIDEO_CALLBACK_T)(void), HRESULT (_TGTCLS_T::*_AUDIO_CALLBACK_T)(void) >
HRESULT SetStreamInitializationCallback(_TGTCLS_T *pCls, _CALLBACK_T pVideoCbck, _CALLBACK_T pAudioCbck){
return NOERROR;
}
struct foo
{
HRESULT bar1() {return NOERROR;}
HRESULT bar2() {return NOERROR;}
};
SetStreamInitializationCallback< foo, &foo::bar1, &foo::bar2 >( pFoo );