Alexandre C.
Alexandre C.

Reputation: 56996

How can you define a static data member of a class template?

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 ?

Upvotes: 192

Views: 122679

Answers (3)

xaxxon
xaxxon

Reputation: 19791

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

Upvotes: 92

Prasoon Saurav
Prasoon Saurav

Reputation: 92942

This will work

template <typename T>
 struct S
 {

     static double something_relevant;
 };

 template<typename T>
 double S<T>::something_relevant=1.5;

Upvotes: 41

sbi
sbi

Reputation: 224179

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.

Upvotes: 255

Related Questions