代码之家  ›  专栏  ›  技术社区  ›  Alexandre C.

类模板中的静态成员初始化

  •  125
  • Alexandre C.  · 技术社区  · 14 年前

    我想这样做:

    template <typename T>
    struct S
    {
        ...
        static double something_relevant = 1.5;
    };
    

    但从那以后我就不行了 something_relevant 不是整型。这不取决于 T ,但现有代码依赖于它是的静态成员 S

    3 回复  |  直到 11 年前
        1
  •  214
  •   sbi    14 年前

    只需在标题中定义它:

    template <typename T>
    struct S
    {
        static double something_relevant;
    };
    
    template <typename T>
    double S<T>::something_relevant = 1.5;
    

    因为它是一个模板的一部分,就像所有模板一样,编译器将确保它只定义一次。

        2
  •  48
  •   xaxxon    6 年前

    由于C++ 17,现在可以声明静态成员为 inline ,它将在类定义中定义变量:

    template <typename T>
    struct S
    {
        ...
        static inline double something_relevant = 1.5;
    };
    

    https://godbolt.org/g/bgSw1u

        3
  •  34
  •   Prasoon Saurav    10 年前

    这会有用的

    template <typename T>
     struct S
     {
    
         static double something_relevant;
     };
    
     template<typename T>
     double S<T>::something_relevant=1.5;