这是必要的吗?
template <typename T>
class A{
T*point;
A<T> someFunction(){} //instead of returning just "A", not "A<T>"
}
someFunction
会隐式返回与正在定义的类相同类型的A
吗?因为在课外,你只能将这种类型称为A<float>
或类似,所以我认为这在课堂上也是必要的。我发现它没有&lt;&gt;而编译所以这让人想知道省略括号是否安全。
答案 0 :(得分:27)
省略类定义中的模板参数是有效且安全的C ++。事实上,这是一种很好的做法,因为您可能稍后会使用默认值添加其他模板参数。您可能忘记将A<T>
更改为A<T,SomeOtherParameter>
并获得奇怪的编译时错误。然后只需返回A
即可。
答案 1 :(得分:19)
您可以说A<T>
或仅A
,A
表示与A<T>
相同。这是因为14.6.1 / 1:
与普通(非模板)类一样,类模板具有注入类名(第9节)。 inject-name-name [...]等同于 template-name ,后跟
<>
中包含的类模板的 template-parameters 。