Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如果函数是在类的主体中定义的,我是否需要在成员函数的返回类型中指定typename?_C++_Templates_Generic Programming_Injected Class Name - Fatal编程技术网

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版本中遇到了问题,尽管在某些情况下有点问题,让我不得不使用全名。