我想知道两者之间是否本质上有区别:
template <typename T>
class foo{
foo<T>(){};
};
template<typename T>
class foo{
foo(){};
};
两者似乎都有效,但我不了解两者之间的区别。第一个让我感到困惑,我不明白<T>在这里的作用。
根据jected -class-name的规则,它们完全是同一回事。
$ 14.6.1 / 1本地声明的名称[temp.local]:
像普通的(非模板)类一样,类模板也具有注入的类名(子句[class])。注入的类名称可以用作模板名称或类型名称。当它与template-argument-list一起使用,作为模板template-parameter的模板参数或作为朋友类模板声明的elaborated-type-specifier中的最终标识符时,它指的是类模板本身。否则,它等效于模板名称,后跟<>中包含的类模板的模板参数。
因此foo
,foo<T>
在这里引用相同的内容。进一步来说,
第一个让我感到困惑,我不明白<T>在这里的作用。
您正在使用foo
带有其模板参数T
(即foo<T>
)的inject-class-name ,它引用模板类本身。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句