Член указателя статической функции в шаблоне класса - PullRequest
0 голосов
/ 10 августа 2010

Как я могу использовать член-указатель статической функции в своем шаблоне класса?

Я работаю с C ++ в Visual Studio, и мой код выглядит примерно так:

template<typename T>
class ClassTemplate
{
public:
    static T* CallIt() { return ClassTemplate<T>::mFunctionPointer(); }

private:
    static T* (*mFunctionPointer)();
};

Когда я компилирую, я получаю ошибку «неразрешенный внешний символ».Я думаю, что я должен сделать что-то подобное вне объявления класса:

template<typename T>
T* (ClassTemplate<T>::*mFunctionPointer)() = NULL;

К сожалению, тогда я получаю C2998, "не может быть определение шаблона".

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 10 августа 2010

Измените положение * так, чтобы оно

template<typename T>
T* (*ClassTemplate<T>::mFunctionPointer)() = NULL;

в противном случае вы пытаетесь определить переменную уровня пространства имен mFunctionPointer как указатель на член класса ClassTemplate.

1 голос
/ 10 августа 2010

Преобразуйте ваше определение в следующее:

template<typename T>
T* (*ClassTemplate<T>::mFunctionPointer)() = NULL;

* * должен появляться перед идентификатором (включая разрешение области видимости класса).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...