鉴于
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
个指针。
答案 0 :(得分:1)
C ++不允许您为基本类型定义运算符重载。在这种情况下,foo::node*
是原始类型。
你可以做的就是在foo::node*
周围创建你自己的包装器,它的行为符合你的要求:
struct node_iterator
{
foo::node* _p;
// ...
friend node_iterator operator++(node_iterator n)
{
return {n._p->next};
}
};