7

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

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

4

1 回答 1

6

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

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

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

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

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

于 2012-12-27T23:12:34.423 回答