166 votes

Membre statique d'initialisation dans un modèle de classe

J'aimerais faire ceci:

template <typename T>
struct S
{
    ...
    static double something_relevant = 1.5;
};

mais je ne peux pas depuis something_relevant n'est pas de type intégral. Il ne dépend pas d' T, mais le code existant dépend-il être un membre statique d' S.

Puisque S est un modèle, je ne peux pas mettre la définition à l'intérieur d'un fichier compilé. Comment puis-je résoudre ce problème ?

221voto

sbi Points 100828

Il suffit de définir dans l'en-tête:

template <typename T>
struct S
{
    static double something_relevant;
};

template <typename T>
double S<T>::something_relevant = 1.5;

Depuis qu'elle est partie d'un modèle, comme avec tous les modèles, le compilateur assurez-vous qu'il est défini une seule fois.

34voto

Prasoon Saurav Points 47488

Cela fonctionne

template <typename T>
 struct S
 {

     static double something_relevant;
 };

 template<typename T>
 double S<T>::something_relevant=1.5;

Ou ai-je raté quelque chose?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X