在指针上定义运算符重载

时间:2017-12-07 18:18:53

标签: 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 << ' ';

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

1 个答案:

答案 0 :(得分:1)

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

你可以做的就是在foo::node*周围创建你自己的包装器,它的行为符合你的要求:

struct node_iterator
{
    foo::node* _p;

    // ...

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