在哪里定义模板类的静态const成员变量

时间:2011-06-22 01:32:20

标签: c++ templates

根据此question's answer

According to the standards you must define i (这是一个静态const成员) outside of the class definition

...但是如果我为模板类的静态const成员变量(它们本身是通用的)那样做,那么我会得到链接错误(类似于如果模板代码在单独的编译单元中则获取链接错误)。如果我在标题中定义它们,链接错误就会消失(我询问是否可以在this question中首先以generic方式定义它们。

我正在做什么,安全吗?以下是标题中静态const成员变量的定义之一。

  template<typename T, unsigned int T_Size> 
  const Vector<T, T_Size> Vector<T, T_Size>::Zero = Vector<T, T_Size>(0);

2 个答案:

答案 0 :(得分:6)

必须在头文件中定义类模板的静态数据成员。只有在定义显式专用模板的静态成员时,才必须在实现文件中定义它们。

换句话说,规则与类模板的成员函数相同。

答案 1 :(得分:2)

由于每个翻译单元都需要完整的模板定义,是的,这是可行的方法。