小编hhg*_*gdd的帖子

为什么模板名称在派生类中可用(基类是模板的实例)?

我遇到了以下代码(用基本类型简化):

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

c++ templates using

7
推荐指数
1
解决办法
92
查看次数

标签 统计

c++ ×1

templates ×1

using ×1