模板类中的静态模板变量

Posted

技术标签:

【中文标题】模板类中的静态模板变量【英文标题】:static template variable in template class 【发布时间】:2019-05-10 06:36:44 【问题描述】:

我想定义模板类的静态模板变量。但我在这里无法获得正确的语法:

template < typename T>
class X

    public:
        T i;
        X(T _i): i_i

        operator T() return i; 
; 

 template < typename T2 >
 class Y
 
     public:
         template <typename T>
             static X<T> x_in_y;
 ;

 // something like that, which currently do not compile     
 template< typename T2, typename T>
 X<T> Y<T2>::x_in_y<T>9.9;

 int main()
 
      std::cout << Y<int>::x_in_y<float> << std::endl;
 

【问题讨论】:

不要在clang中使用模板类的静态模板变量成员! godbolt.org/z/dCZq7I 这会让 Clang 崩溃,或者最糟糕! @Oliv:瑞银!感谢您的提示。看来这两个编译器都有问题! 不,那只是一个 Clang 的 bug,gcc 没有这个。 【参考方案1】:

x_in_y 是模板中的模板,所以需要嵌套模板声明:

template<typename T2>
template<typename T>
X<T> Y<T2>::x_in_y9.9;

【讨论】:

g++ 抱怨“X Y::x_in_y9.9;”但是“X Y::x_in_y9.9;”有效吗?! 你没有定义变量 int foo;但这基本上是您的第一个语法尝试做的事情。 @Klaus 去掉最右边的&lt;T&gt;。我也错误地在我的答案中有这个。 是的,已经完成了 ;) 您能否再谈谈部分专业化?我在我的问题中添加了一些用例。谢谢! @Klaus 你应该把它作为一个单独的问题。

以上是关于模板类中的静态模板变量的主要内容,如果未能解决你的问题,请参考以下文章

c++在模板类中使用list问题

在可变参数模板类中初始化静态数组

访问模板类的非模板库的静态数据

如何将模板类添加为普通类中的成员

C ++静态库中的模板方法[重复]

继承抽象static