Итак, у меня есть простая структура, используемая для определений шаблонов.
template<class T>
struct EventListener
{
typedef Functor<T, void, Event*> functor;
typedef void (T::*FunctionPtr)(Event* evt);
};
, а в классе у меня есть функция
template<class T>
void addEventListener(const string &eventName, T* target, EventListener<T>::FunctionPtr function);
Когда я пытаюсь это построить (VS2010, Windows7, x64)
Я получаю следующую ошибку:
Error C2061: syntax error : identifier 'FunctionPtr'
Мне кажется, это должно быть допустимо.
Если я заменю T в объявлении функции на определенный класс ...
template<class T>
void addEventListener(const string &eventName, T* target, EventListener<Foobar>::FunctionPtr function);
... Код скомпилируется.
И если я заменю typedefс фактическим типом ...
template<class T>
void addEventListener(const string &eventName, T* target, void(T::*function)(Event* evt));
... он также компилируется.
Так чего мне здесь не хватает?Я почти уверен, что последний пример подойдет для моих целей, но я бы предпочел оставить его в typedef.