C++ 返回自己类型的模板类方法的正确签名

C++ 返回自己类型的模板类方法的正确签名,c++,class,oop,templates,operator-overloading,c++14,C++,Class,Oop,Templates,Operator Overloading,C++14,我的特殊情况涉及一个自定义迭代器,但这个问题是一个一般性问题。我不确定如何编写此后缀增量方法的返回类型: template<typename T> struct MyIterator { size_t loc; MyIterator operator++(int) { MyIterator temp(*this); ++loc; return temp; } }; 模板 结构MyIterator{ 尺寸/位置

我的特殊情况涉及一个自定义迭代器,但这个问题是一个一般性问题。我不确定如何编写此后缀增量方法的返回类型:

template<typename T>
struct MyIterator {
    size_t loc;

    MyIterator operator++(int) {
        MyIterator temp(*this);
        ++loc;
        return temp;
    }
};
模板
结构MyIterator{
尺寸/位置;
MyIterator运算符++(int){
MyIterator temp(*this);
++loc;
返回温度;
}
};
这会编译,但这也会编译:

template<typename T>
struct MyIterator {

    size_t loc;

    MyIterator<T> operator++(int) {
        MyIterator<T> temp(*this);
        ++loc;
        return temp;
    }
};
模板
结构MyIterator{
尺寸/位置;
MyIterator运算符++(int){
MyIterator temp(*this);
++loc;
返回温度;
}
};
另外两种配置也可以正常工作(即仅将
放在
MyIterator
的一个实例上)。有没有一种“正确”的方式来写这个?这有关系吗

有没有一种“正确”的方式来写这个

两个名字都是正确的。但是,使用注入的类名更简单、更可取,特别是当有多个模板参数时。想象一下你有:

template <typename T1, typename T2, typename T3> class MyClass { ... };
模板类MyClass{…};
在类模板内部,最好使用
MyClass
而不是
MyClass

这有关系吗

没有

由于您在类的作用域内,名称查找将找到您期望的内容。这与注入类名称有关,我建议您在此处阅读更多相关内容:



因为,另一个正确的方法是不带尾随返回类型的
auto
,正如skypjack提到的那样。

这无关紧要。您看到的是注入的类名另一种正确的方法是
auto
,自C++14以来没有尾随返回类型。谢谢@skypjack,改进了我的答案!