Me gustaría hacer esto:
template <typename T>
struct S
{
...
static double something_relevant = 1.5;
};
pero no puedo ya something_relevant
que no es de tipo integral. No depende de T
, pero el código existente depende de que sea un miembro estático S
.
Como S es plantilla, no puedo poner la definición dentro de un archivo compilado. ¿Cómo resuelvo este problema?
std::string
tipoRespuestas:
Solo defínalo en el encabezado:
Como forma parte de una plantilla, como con todas las plantillas, el compilador se asegurará de que solo se defina una vez.
fuente
<goes_playing>
Wow, cuando paso el mouse sobre tu nombre, veo tu representante! Yo tampoco lo sabía. @Prasoon: No, tienes razón, llegué iterativamente a donde está ahora. (Es por eso que hasta-votado en su respuesta, por cierto.)Desde C ++ 17, ahora puede declarar que el miembro estático es
inline
, que definirá la variable en la definición de clase:en vivo: https://godbolt.org/g/bgSw1u
fuente
Esto funcionará
fuente
template<typename T> double S<T>::something_relevant=1.5;)
definí la variable something_relevant ( eliminé el error de lanzamiento del compilador. ¿Puede decirme cuál es la razón?