c++templatesstaticstatic-membersclass-template

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 ?


Solution

  • 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.