模板类的静态const成员

static const members of template classes

本文关键字:const 成员 静态      更新时间:2023-10-16

我有一个带有静态const成员的模板类:

template <class T>
class A
{
public:
    A(T val) : t(val) {}
    static const int VALUE = 5;
    T t;
};

假设在代码的某个地方,我使用int、char和long类型实例化了它。现在我想访问VALUE:

int main()
{
    int i1 = A<int>::VALUE;
    int i2 = A<char>::VALUE;
    int i3 = A<long>::VALUE;
    return 0;
}

上述访问同一事物的方法不都是相同的吗?在这种情况下,其他人会选择随机类型吗?有什么方法可以避免指定类型吗?

这些都是数值常量,共享相同的值,但属于不同的名称空间。所以你不能避免指定封闭类(通过实例化模板),即使它不是真正需要的。

但是,您可以将static const定义移动到A<T>将继承的类中:
class A_Consts
{
  static const int VALUE = 5;
  ...
}; 
template<typename T>
class A : public A_Consts
{
...
};

或者,将常量定义移到类之外,并将它们都包含在名称空间中。这似乎是更好的解决方案。