定义模板类的静态常量变量
Defining static const variables of a template class
我有一个向量类,它有一些静态常量变量,比如ZERO
。现在,由于vector通常被实现为模板类(我的也不例外),我看到了很多这样的代码:
template<> const Vector2<float> Vector2<float>::ZERO;
template<> const Vector2<float> Vector2<float>::UNIT_X(1, 0);
//... and so on, and then all code duplicated for other types (int, double, long double)
// including different sizes of the Vector (Vector2, Vector3, Vector4)
我的问题是,我能做这样的事情来避免重复不同类型的代码吗:
template <typename T, unsigned int SIZE>
const Vector<T, SIZE> Vector<T, SIZE>::ZERO;
这能满足未来所有类型的需求吗?如果不是,如果我用以下内容明确定义各种类型的类,会有什么不同吗:
template Vector<float, 2>;
template Vector<float, 3>;
到目前为止,我已经在Visual C++(2008)上对它进行了测试,它编译得很好,测试也通过了,但我想知道这是否是非标准代码。
不,这是完全合法且完全标准的。如果你想在模板类中使用静态变量,你不可能定义它的所有可能的实例化——这些类型甚至可能是不可命名的,因此是可特殊化的。因此,模板类可以为所有可能的用途定义静态变量是非常必要的。
没关系。
模板是告诉编译器为不同类型生成类似代码的一种方式
这正是它的用途。
相关文章:
- 私有类型的静态常量成员
- 分离一个静态常量 std::thread?
- 从另一个静态常量数组初始化静态常量数组(只需少量计算)
- 我可以在运行时重新定义在 OpenCascade/OCCT 标头中定义的 c++ 静态常量吗?
- 如何为静态常量模板化专用整数值分配存储
- 使用什么代替"静态常量 TCHAR *"
- C++ 模板中的静态常量初始化顺序
- 如何在编译时解析静态常量 std::string?
- 关于静态常量数据模因的声明和定义的混淆
- 将 static_cast<int>(-15) 分配给静态常量字符类型变量
- 为什么在第二类中使用静态常量会在第一类中给出编译器错误?
- 静态常量与常量局部变量,哪一个性能更好
- 如何在模板类中设置静态常量变量
- public:静态常量字符串声明/初始化问题
- 有没有办法声明一个公共静态常量,该常量将使用 constexpr 在源文件中定义(有什么区别)?
- 对静态常量积分类型的未定义引用
- 全局变量中的静态常量与常量
- c++ 类中的静态常量变量和常量变量在存储方面是否有区别
- 避免在静态常量类上定义但不使用
- 指向静态常量对象的共享指针?