首页 > 解决方案 > 如果函数是在类的主体内定义的,是否需要在成员函数的返回类型中指定 typename?

问题描述

考虑下面的例子:

template <typename T>
class SomeClass {
    // rest of the definition ...

    SomeClass<T>& function1() {
        // ...
        return *this;
    }

    SomeClass& function2() {
        // ...
        return *this;
    }

}

上面两个函数的返回值有区别吗?如果不是,应该首选哪一个?

标签: c++templatesgeneric-programminginjected-class-name

解决方案


function1和之间没有区别function2。在定义SomeClass中没有模板参数的SomeClass类型是使用注入类名的一个实例:

注入的类名是所述类范围内的类的名称。

在类模板中,注入的类名既可以用作引用当前模板的模板名,也可以用作引用当前实例化的类名。

是否使用其中一个是主观的,但是注入的类名更易于维护,因为如果您更改SomeClass.


推荐阅读