c++ - 返回其自身类型的模板类方法的正确签名

标签 c++ class oop templates operator-overloading

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

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?


, 另一个正确的方法是 auto如 skypjack 所述,没有尾随返回类型。

关于c++ - 返回其自身类型的模板类方法的正确签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44504830/

相关文章:

c++ - 转发声明 typedef 保护

c++ - 使用 Xcode 调试 c++ .cpp 文件

javascript - 等效于 Javascript 中类的 getElementById

javascript - 闭包如何访问被破坏的变量?

ruby - 为什么会存在 Ruby 模块内核?

c++ - 在MFC图片框中显示IPLimage/MAT(opencv)

c++ - 随机删除 Excel 工作表失败

java - 在类中使用静态方法时没有输出(其中没有 main 函数的类)

javascript - 通过 JavaScript 更改 CSS 属性。 (使用 ID 和类)

java - 在没有访问者模式的情况下避免类型自省(introspection)