hhg*_*gdd 7 c++ templates using
我遇到了以下代码(用基本类型简化):
template <typename T>
class Base {
T t;
};
class Derived : public Base<short> {
public:
using Base<short>::Base;
};
int main() {
Derived::Base<long long> x;
printf("%lu\n", sizeof(x));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它可以编译工作(输出为8,这是long long的大小)。看起来我可以使用Base<T>任何类型的T数据Derived::Base,即使Derived只是Base<short>。(在我遇到的代码中,Base它本身不可见main。)
但是,我不太了解这种语法及其工作原理。
是Derived::Base模板名称,类还是函数(ctor)?似乎是模板名称。模板名称在实例化此模板的所有类中都可用(例如,所有类型的模板名称Base都在其中)?我很混乱。任何对cppreference或C ++标准的解释或指针均应赞赏。Base<T>T
来自en.cppreference.com/injected-class-name:
在以下情况下,注入的类名称被视为类模板本身的模板名称:
- 其后是 <
- [..]
因此,根据上下文,Base里面是一个类或模板名称。Base<T>