J'aimerais faire ceci:
template <typename T>
struct S
{
...
static double something_relevant = 1.5;
};
mais je ne peux pas puisque ce something_relevant
n'est pas de type intégral. Cela ne dépend pas T
, mais le code existant dépend du fait qu'il soit un membre statique de S
.
Puisque S est un modèle, je ne peux pas mettre la définition dans un fichier compilé. Comment résoudre ce problème?
std::string
typeRéponses:
Définissez-le simplement dans l'en-tête:
Puisqu'il fait partie d'un modèle, comme avec tous les modèles, le compilateur s'assurera qu'il n'est défini qu'une seule fois.
la source
<goes_playing>
Wow, quand je survole votre nom, je vois votre représentant! Je ne connaissais pas celui-là non plus. @Prasoon: Non, vous avez raison, je suis arrivé itérativement là où il en est maintenant. (C'est pourquoi j'ai voté pour votre réponse, BTW.)Depuis C ++ 17, vous pouvez maintenant déclarer le membre statique comme étant
inline
, ce qui définira la variable dans la définition de classe:en direct: https://godbolt.org/g/bgSw1u
la source
Cela fonctionnera
la source
template<typename T> double S<T>::something_relevant=1.5;)
erreur de lancement du compilateur, pouvez-vous me dire quelle en est la raison?