根据此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);
答案 0 :(得分:6)
必须在头文件中定义类模板的静态数据成员。只有在定义显式专用模板的静态成员时,才必须在实现文件中定义它们。
换句话说,规则与类模板的成员函数相同。
答案 1 :(得分:2)
由于每个翻译单元都需要完整的模板定义,是的,这是可行的方法。