【发布时间】:2019-07-28 20:17:35
【问题描述】:
我遇到了这段代码(用基本类型进行了简化):
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;
}
它编译并工作(输出为 8,即 long long 的大小)。似乎我可以使用Derived::Base 为任何类型T 获得Base<T>,即使Derived 只是Base<short> 的子类。 (在我遇到的代码中,Base 本身对main 是不可见的。)
但是,我不太明白这个语法及其工作原理。
Derived::Base 是模板名称、类还是函数(ctor)?这似乎是一个模板名称。模板名称是否在所有实例化此模板的类中可用(例如模板名称 Base 在 Base<T> 中,对于所有类型 T)?我很混乱。对 cppreference 或 C++ 标准的任何解释或指针表示赞赏。
【问题讨论】:
-
我认为 Derived::Base 让你创建一个 Base 类型而不是 Dervied 类型 :)
-
既是模板名也是类。取决于你如何使用它。
-
@cpplearner 如果你知道答案,你应该把它作为答案发布。