如果函数是在类主体内定义的,我是否需要在成员函数的返回类型中指定typename?

Dev*_*wal 4 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;
    }

}
Run Code Online (Sandbox Code Playgroud)

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

Vit*_*meo 5

function1和之间没有区别function2SomeClass在没有定义的模板参数的情况下键入SomeClass是使用Injectiond-class-name的实例:

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

在类模板中,injected-class-name可以用作引用当前模板的模板名称,也可以用作引用当前实例的类名称。

是否在另一个上使用是主观的,但是注入的类名更易于维护,因为如果您更改模板参数的数量,则不必手动更改SomeClass