I'd like to do this:
template <typename T>
struct S
{
...
static double something_relevant = 1.5;
};
but I can't since something_relevant
is not of integral type. It doesn't depend on T
, but existing code depends on it being a static member of S
.
Since S is template, I cannot put the definition inside a compiled file. How do I solve this problem ?
std::string
type
Just define it in the header:
template <typename T>
struct S
{
static double something_relevant;
};
template <typename T>
double S<T>::something_relevant = 1.5;
Since it is part of a template, as with all templates the compiler will make sure it's only defined once.
Since C++17, you can now declare the static member to be inline
, which will define the variable in the class definition:
template <typename T>
struct S
{
...
static inline double something_relevant = 1.5;
};
live: https://godbolt.org/g/bgSw1u
This will work
template <typename T>
struct S
{
static double something_relevant;
};
template<typename T>
double S<T>::something_relevant=1.5;
template<typename T> double S<T>::something_relevant=1.5;)
compiler throwing error.Can you please tell me what is the reason?
Success story sharing
<goes_playing>
Wow, when I hover over your name, I see your rep! I didn't know that one either. @Prasoon: No, you're right, I iteratively arrived at where it is now. (That's why I up-voted your answer, BTW.)