模板类的静态const成员
static const members of template classes
我有一个带有静态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
{
...
};
或者,将常量定义移到类之外,并将它们都包含在名称空间中。这似乎是更好的解决方案。
相关文章:
- 不允许运算符 const 参数调用 const 成员函数
- c++ 是否保证标头初始化的静态 const 成员跨编译单元和库共享单个实例?
- 在类声明中初始化 const 成员变量时在调试模式下出现异常
- 如何避免将 const 和非 const 成员函数输入到模板中的代码重复
- 初始化 const 成员的正确方法
- 使用 Boost 对具有 const 成员的类进行序列化
- 非常量调用 const 成员函数失败,只读位置C++
- PIMPL类的设置应该是const成员函数
- 与其他静态const成员初始化静态常量成员
- decltype 不会推断 const 对象的 const 成员
- 如何初始化不是静态的const成员
- 如何使用常量变量初始化类的 const 成员变量
- 使用模板参数初始化静态 const 成员
- 与const成员配对的向量
- 通过参考const成员通过参考时,尝试引用已删除的函数
- const成员初始化之前的用法是GCC和Clang的这种预期行为
- 通过const成员变量访问内联函数
- 与const成员一起安排新的和班级的分配
- 在const函数中调用非CONST成员的非const函数
- 为什么即使对于 "copy on write" 的 const 成员函数也返回一个代理类?