Imaginez la classe de modèle suivant (setter et getter pour le membre _t
omis):objet modèle en tant que membre statique de la classe de modèle
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'idée de base de ce concept est, au lieu d'utiliser null-pointeurs, J'ai un élément statique par défaut qui accepte ce rôle tout en étant un objet techniquement valide; cela pourrait empêcher certains des problèmes avec des pointeurs nuls tout en rendant le code plus bavard en même temps ...
je peux instancier ce modèle très bien, mais l'éditeur de liens donne une non résolue-externe erreur sur l'organe statique objet NONE
.
Je suppose que lors de l'instanciation du modèle, la ligne static chain<T> NONE
; serait effectivement aussi une définition, comme cela se produit réellement dans l'implémentation en instanciant le modèle. Cependant, il s'avère ne pas être ...
Ma question est: est quelque chose comme possible du tout, et si oui, comment, sans définir explicitement l'élément NONE
avant chaque instanciation de modèle?
Je ne pense pas est un produit de nettoyage que l'utilisation un pointeur nul, honnêtement. Remplacez simplement '& NONE' par 0. – GManNickG