访问模板化类的非模板基的静态数据
Access static data of non-template base of templated class
模板类派生自具有静态数据成员的非模板类。为什么我不能在不指定模板参数的情况下访问它?实际上,我可以在没有模板参数的情况下访问模板类中的任何方法或数据吗?
class CNonTemplateBase{
public:
static int some_data;
};
int CNonTemplateBase::some_data = 10;
template<typename T> class CTemplateClass : public CNonTemplateBase{};
...
...
int a = CTemplateClass<int>::some_data; //OK
int b = CTemplateClass::some_data; //ERROR
这是因为CTemplateClass
本身并不存在。模板类必须首先使用提供的模板参数生成。
为什么我不能在不指定模板参数的情况下访问它?
因为可以编写CTemplateClass
,使其仅针对模板参数的某些特定值从CNonTemplateBase
继承。
实际上,我可以在没有模板参数的情况下访问模板类中的任何方法或数据吗?
否,因为它们可能取决于模板参数。
最后,这只是语言的工作方式。我认为在某些条件下可以更改语言以允许您想要的语法,但如果没有充分的理由,这会使C++变得更加复杂。
编译器不会在没有实例化(类型(的情况下为模板类生成代码。因此,您不能访问实例化模板类的静态成员。
相关文章:
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 静态数据成员模板专用化的实例化点在哪里
- 内联静态数据的初始化
- 调用在 HXX 文件中声明的静态数据成员
- 虚拟成员函数的定义是否强制在同一转换单元中动态初始化静态数据成员?
- 错误: 无效使用非静态数据成员"应用程序::应用程序构造函数"
- 静态数据成员:它"const declaration / constexpr definition"起作用?
- 何时需要定义类的静态数据成员 (un/-)
- 为什么静态数据成员不能在c++11中的类中初始化
- 访问模板化类的非模板基的静态数据
- 静态数据成员的模板专用化
- 拒绝包含某些公共静态数据成员的类型
- GCC:在调试构建中优化的静态数据成员
- 类模板静态数据成员定义/声明/初始化
- 是否允许在作为静态数据结构成员的lambda函数中捕获变量
- C++ 中的静态数据成员
- 如果类在 C++ 中具有常量或引用类型的非静态数据成员,为什么编译器不提供默认赋值运算符?
- 使用 lambda 函数初始化静态数据成员
- 引用静态数据成员
- 学习C++并在早期示例中遇到错误(在非静态数据成员之前需要构造函数)