2009-03-28 6 views
4

J'ai une classe de modèle qui a un pointeur à membre statique, comme ceci:C++ modèle initialisation pointeur à membre statique

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

Ma question est de savoir comment écrire le initialiseur de la pointeur- statique membre. J'ai essayé le cas évident:

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

Mais cela n'a pas fonctionné. Une idée?

Répondre

3

Queue<T, nextptr>::pnext est déclarée en tant que type T* T::*, il devrait donc ressembler à ceci:

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

Avez-vous vraiment besoin d'une variable membre statique d'un modèle qui a la même valeur en tant que paramètre de modèle? La seule utilisation serait si sa valeur devait changer au cours de la vie du programme mais je ne peux vraiment pas penser à n'importe quelle situation si cela produirait plus de bénéfice que de causer la confusion.

+0

Merci pour la perspicacité, je n'ai vraiment pas besoin de la variable membre statique, seul le paramètre de modèle. – agazso

+0

il pourrait s'en servir s'il connaissait seulement le type. alors il peut faire Type :: pnext; (un peu comme ces types-defs) mais alors je le recommanderais pour faire le pointeur const. mais même ainsi, je préférerais une fonction inline statique. –

Questions connexes