简体   繁体   English

在指针上定义运算符重载

[英]Defining operator overload on pointer

Given 特定

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; }
};

I need to overload ++ that acts on foo::node* only. 我需要重载仅作用于foo::node* ++ Where and how do I define that operator? 我在哪里以及如何定义该运算符? My commented-out line above indicates what I'm trying to do. 我上面的注释行指出了我要执行的操作。 Thanks. 谢谢。

An example usage is: 一个示例用法是:

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

where f is a foo object, and the begin() and end() functions return some foo::node pointers. 其中ffoo对象, begin()end()函数返回一些foo::node指针。

C++ doesn't allow you to define operator overloads for primitive types. C ++不允许您为原始类型定义运算符重载 In this case, foo::node* is primitive type. 在这种情况下, foo::node*是原始类型。

What you can do is create your own wrapper around foo::node* which behaves as you desire: 您可以做的就是围绕foo::node*创建自己的包装器,该包装器的行为如您所愿:

struct node_iterator
{
    foo::node* _p;

    // ...

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM