Per*_*-lk 25 c++ inheritance templates
令我惊讶的是,typename
当依赖类型作为基类出现时,没有必要添加:
struct B {};
struct wr
{ typedef B type; };
template<class T>
struct A : T::type
{};
int main()
{
A<wr> a;
(void)a;
}
Run Code Online (Sandbox Code Playgroud)
为什么typename
不需要在前面T::type
?
lub*_*bgr 19
为什么
typename
不需要在前面T::type
?
因为您不能从值继承。您typename
通常告诉编译器给定的嵌套标识符是一种类型,但是对于继承,无论如何都必须如此,因此可以忽略它-这就是语言typename
为基本说明符提供-规则例外的原因。来自cppreference(重点是我的):
typename
依存名称的歧义消除器在模板(包括别名模板)的声明或定义中,除非使用关键字typename或已经使用关键字typename,否则不将其视为当前实例的成员并且依赖于模板参数的名称不视为类型。建立为类型名称,例如使用typedef声明或通过用来命名基类。
请注意,我们将获得更多typename
可省略的地方,请参阅P0634。
归档时间: |
|
查看次数: |
1038 次 |
最近记录: |