给定
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/