Статическая инициализация указателя на член шаблона C ++ - PullRequest
4 голосов
/ 28 марта 2009

У меня есть шаблонный класс, который имеет статический указатель на член, например:

template<class T, T* T::*nextptr>
class Queue
{
    T* head;
    T* tail;
    static T* T::*pnext;
};

Мой вопрос заключается в том, как написать инициализатор статического указателя на член. Я попробовал очевидный случай:

template<class T, T* T::*nextptr> T* Queue<T, nextptr>::*pnext(nextptr);

Но это не сработало. Есть идеи?

Ответы [ 2 ]

4 голосов
/ 28 марта 2009

Вам действительно нужна статическая переменная-член шаблона, которая имеет то же значение, что и параметр шаблона?

Единственное использование было бы, если бы его значение изменялось в течение жизненного цикла программы, но я действительно не могу думать ни о какой ситуации, если бы это принесло больше пользы, чем вызвало бы путаницу.

3 голосов
/ 28 марта 2009

Queue<T, nextptr>::pnext объявлен как тип T* T::*, поэтому он должен выглядеть следующим образом:

template<class T, T* T::*nextptr>
T* T::* Queue<T, nextptr>::pnext(nextptr);
...