【问题标题】:Defining operator overload on pointer在指针上定义运算符重载
【发布时间】:2017-12-07 18:18:52
【问题描述】:

给定

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 指针。

【问题讨论】:

  • 如果只涉及原始类型,则不能定义运算符重载。
  • 您需要为此创建一个迭代器类。你不能只使用指针。

标签: c++ pointers operator-overloading


【解决方案1】:

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

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

struct node_iterator
{
    foo::node* _p;

    // ...

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

【讨论】:

  • 但是如果我要在foousing iterator = node_iterator; 中定义,我该如何转发声明foo::node
猜你喜欢
  • 2017-10-04
  • 1970-01-01
  • 2021-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-21
相关资源
最近更新 更多