模板类的静态const成员

时间:2012-12-27 23:03:46

标签: c++ templates

我有一个带有静态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;
}

是不是所有上述相同的方式都可以访问相同的内容?在这种情况下,其他人只选择随机类型吗?有没有办法避免指定类型?

1 个答案:

答案 0 :(得分:5)

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

但是,您可以将static const定义移到A<T>将继承的类中:

class A_Consts
{
  static const int VALUE = 5;
  ...
}; 

template<typename T>
class A : public A_Consts
{
...
};

或者,将常量定义移到类外,并将它们都包含在一个名称中。这似乎是更好的解决方案恕我直言。