Chciałbym to zrobić:
template <typename T>
struct S
{
...
static double something_relevant = 1.5;
};
ale nie mogę, ponieważ something_relevant
nie jest typu integralnego. Nie zależy od T
, ale istniejący kod zależy od tego, czy jest statycznym członkiem S
.
Ponieważ S jest szablonem, nie mogę umieścić definicji w skompilowanym pliku. Jak rozwiązać ten problem?
std::string
typuOdpowiedzi:
Po prostu zdefiniuj to w nagłówku:
Ponieważ jest częścią szablonu, tak jak w przypadku wszystkich szablonów, kompilator upewni się, że jest zdefiniowany tylko raz.
źródło
<goes_playing>
Wow, kiedy najeżdżam kursorem na Twoje imię, widzę Twojego przedstawiciela! Tego też nie znałam. @Prasoon: Nie, masz rację, iteracyjnie dotarłem do miejsca, w którym jest teraz. (Dlatego też zagłosowałem za twoją odpowiedzią, BTW.)Od C ++ 17 możesz teraz zadeklarować statyczny element członkowski
inline
, który zdefiniuje zmienną w definicji klasy:na żywo: https://godbolt.org/g/bgSw1u
źródło
To zadziała
źródło
template<typename T> double S<T>::something_relevant=1.5;)
rzucania kompilatora, czy możesz mi powiedzieć, jaki jest powód?