oggetto Modello come membro statico della classe template
Domanda
Immaginate la seguente classe di template (setter e getter per la _t
membro omesso):
template<class T>
class chain
{
public:
static chain<T> NONE;
chain()
: _next(&NONE)
{}
~chain() {}
chain<T>& getNext() const
{
return *_next;
}
void setNext(chain<T>* next)
{
if(next && next != this)
_next = next;
}
chain<T>& getLast() const
{
if (_next == &NONE)
return *this;
else
return _next->getLast();
}
private:
T _t;
chain<T>* _next;
};
L'idea di base di questo concetto è, invece di utilizzare nulli punti, ho un elemento predefinito statico che prende in questo ruolo, pur essendo un oggetto tecnicamente valida; questo potrebbe prevenire alcuni dei problemi con i puntatori nulli rendendo il codice più prolisso, allo stesso tempo ...
Posso un'istanza di questo modello bene, ma il linker dà una irrisolto-esterno di errore sul NONE
oggetto membro statico.
I avrebbe assunto che quando un'istanza del modello, la linea static chain<T> NONE
; potrebbe effettivamente essere una definizione, anche, come effettivamente avviene all'interno all'attuazione un'istanza modello. Tuttavia, si scopre non essere ...
La mia domanda è: è qualcosa di simile possibile a tutti, e se sì, come, senza definire in modo esplicito l'elemento NONE
prima di ciascun modello di un'istanza
Soluzione
È ancora necessario definire che al di fuori della classe, proprio come una classe non-template. Proprio come in una classe non-template, si è dichiarato solo NONE
all'interno della definizione di classe e ancora bisogno di definirlo:
template<class T>
class chain
{
// the same as your example
};
// Just add this
template <class T>
chain<T> chain<T>::NONE;
Altri suggerimenti
template < typename T >
chain<T> chain<T>::NONE;
dovrebbe funzionare