我的特殊情况涉及自定义迭代器,但这个问题是一般性问题。我不确定如何为这个后缀增量方法编写返回类型:
template<typename T>
struct MyIterator {
size_t loc;
MyIterator operator++(int) {
MyIterator temp(*this);
++loc;
return temp;
}
};
这会编译,但这样做也是如此:
template<typename T>
struct MyIterator {
size_t loc;
MyIterator<T> operator++(int) {
MyIterator<T> temp(*this);
++loc;
return temp;
}
};
其他两个配置也可以正常工作(即,将 <T>
仅放在 MyIterator
的一个实例上)。有写这个的“正确”方法吗?重要吗?
最佳答案
Is there a "correct" way to write this?
两个名字都是正确的。然而,使用注入(inject)的类名更简单和更可取,尤其是在有多个模板参数的情况下。假设您有:
template <typename T1, typename T2, typename T3> class MyClass { ... };
在类模板中,最好使用MyClass
。比MyClass<T1, T2, T3>
.
Does it matter?
没有。
由于您在类的范围内,名称查找将找到您期望的内容。这与注入(inject)的类名有关,我建议您在这里阅读更多相关信息:Why is there an injected class name?
自 c++14 , 另一个正确的方法是 auto
如 skypjack 所述,没有尾随返回类型。
关于c++ - 返回其自身类型的模板类方法的正确签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44504830/