我有一个带有静态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;
}
是不是所有上述相同的方式都可以访问相同的内容?在这种情况下,其他人只选择随机类型吗?有没有办法避免指定类型?
答案 0 :(得分:5)
这些都是数字常量,共享相同的值,但属于不同的名称空间。所以你不能避免指定封闭类(通过实例化模板),即使它并不是真的需要。
但是,您可以将static const
定义移到A<T>
将继承的类中:
class A_Consts
{
static const int VALUE = 5;
...
};
template<typename T>
class A : public A_Consts
{
...
};
或者,将常量定义移到类外,并将它们都包含在一个名称中。这似乎是更好的解决方案恕我直言。