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. Cela ne dépend pas de T
, mais le code existant dépend de sa qualité de 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?
Il suffit de le 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;
Comme il fait partie d’un modèle, le compilateur s’assure qu’il n’est défini qu’une fois.
Ça va marcher
template <typename T>
struct S
{
static double something_relevant;
};
template<typename T>
double S<T>::something_relevant=1.5;
Depuis C++ 17, vous pouvez maintenant déclarer le membre statique à inline
, ce qui définira la variable dans la définition de la classe:
template <typename T>
struct S
{
...
static inline double something_relevant = 1.5;
};