c++ - 在指针上定义运算符重载

标签 c++ pointers operator-overloading

给定

struct foo {
    struct node {
        int data;
        node* next, prev;
    };
    friend std::ostream& operator<< (std::ostream& os, const foo::node& n) {
         os << n.data;  
         return os;
    }
    // friend node* operator++ (list::node* n) { return n->next; }
};

我需要重载仅作用于 foo::node*++。我在哪里以及如何定义该运算符?我上面注释掉的行表明我正在尝试做什么。谢谢。

一个例子用法是:

for (list::node* it = f.begin();  it != f.end();  ++it)
     std::cout << *it << ' ';

其中 f 是一个 foo 对象,begin()end() 函数返回一些foo::node 指针。

最佳答案

C++ 不允许您为原始类型定义运算符重载。在这种情况下,foo::node* 是原始类型。

你可以做的是围绕 foo::node* 创建你自己的包装器,它的行为如你所愿:

struct node_iterator
{
    foo::node* _p;

    // ...

    friend node_iterator operator++(node_iterator n) 
    { 
        return {n._p->next}; 
    }
};

关于c++ - 在指针上定义运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47701376/

相关文章:

c++ - 返回对对象的 const 引用

c++ - 'const' 在 operator() 重载中做了什么?

c++ - std::move on const char* 完美转发

c++ - 从 istream 获取下一个 float ?

c - 函数指针的自由数组

c - 为什么这个 qsort() 不起作用?

c++ - union的用法和乱码

android - 无法通过 ptrace 附加某些进程?

c - 如何使用指针更改双链表中的2个节点? C

c++ - 两个不是我自己的类的自定义赋值运算符