23

这是必要的吗:

 template <typename T>
 class A{
   T*point;
   A<T> someFunction(){} //instead of returning just "A", not "A<T>"
 }

是否会someFunction隐式返回与A正在定义的类相同类型的 ?因为在课堂之外,您只能将这种类型称为A<float>或类似类型,所以我认为这在课堂内也是必要的。我发现它在没有 <> 的情况下编译,所以这让人怀疑省略括号是否是一个安全的习惯。

4

2 回答 2

30

在类定义中省略模板参数是有效且安全的 C++。事实上,这是一种很好的做法,因为稍后您可能会添加其他具有默认值的模板参数。您可能会忘记更改A<T>A<T,SomeOtherParameter>并得到奇怪的编译时错误。然后只需返回即可A

于 2013-06-05T11:20:22.687 回答
20

你可以说或者A<T>或者只是A,和A意思一样A<T>。这是因为 14.6.1/1:

像普通(非模板)类一样,类模板有一个注入类名(第 9 条)。注入的类名 [...] 等价于模板名,后跟包含在 中的类模板的模板参数<>

于 2013-06-05T11:28:32.147 回答