访问模板化类的非模板基的静态数据

Access static data of non-template base of templated class

本文关键字:静态 数据 访问      更新时间:2023-10-16

模板类派生自具有静态数据成员的非模板类。为什么我不能在不指定模板参数的情况下访问它?实际上,我可以在没有模板参数的情况下访问模板类中的任何方法或数据吗?

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++变得更加复杂。

编译器不会在没有实例化(类型(的情况下为模板类生成代码。因此,您不能访问实例化模板类的静态成员。