C++ 如果函数是在类的主体中定义的,我是否需要在成员函数的返回类型中指定typename?
考虑下面的例子:C++ 如果函数是在类的主体中定义的,我是否需要在成员函数的返回类型中指定typename?,c++,templates,generic-programming,injected-class-name,C++,Templates,Generic Programming,Injected Class Name,考虑下面的例子: template <typename T> class SomeClass { // rest of the definition ... SomeClass<T>& function1() { // ... return *this; } SomeClass& function2() { // ... return *this;
template <typename T>
class SomeClass {
// rest of the definition ...
SomeClass<T>& function1() {
// ...
return *this;
}
SomeClass& function2() {
// ...
return *this;
}
}
模板
上课{
//其余的定义。。。
SomeClass&function1(){
// ...
归还*这个;
}
SomeClass&function2(){
// ...
归还*这个;
}
}
上述两个函数的返回值之间是否存在差异?如果不是,应该选择哪一个?在
功能1
和功能2
之间没有区别。在SomeClass
的定义中键入不带模板参数的SomeClass
是使用
注入的类名是所述类范围内的类的名称
在类模板中,注入的类名可以用作引用当前模板的模板名,也可以用作引用当前实例化的类名
是否使用一个而不是另一个是主观的,但是注入的类名更易于维护,因为如果您更改
SomeClass
的模板参数数量,则不必手动更改,没有区别,通常首选第二个版本,需要更少的代码重复。旁注:即使在类模板定义之外,也不必使用第一个表单。这是跟踪返回类型auto-SomeClass::function2()->SomeClass&
的一个很好的特性,我在一些较旧的GCC版本中遇到了问题,尽管在某些情况下有点问题,让我不得不使用全名。