[英]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. 其中
f
是foo
对象, 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.