gpt4 book ai didi

C++ 重载运算符 '>>'

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:19:20 24 4
gpt4 key购买 nike

我一直在查看大量不同的示例和解释,但没有一个能真正回答我正在寻找的内容。我有三个类,每个类都有一个名为 connect 的方法:

class foo { ... }
void foo::connect(bar br) { ... }

class bar { ... }
bar& bar::connect(baz bz) { ... }

class baz { ... }
baz& baz::connect() { ... }

在我的主课中,我像这样“连接”它们:

foo.connect(bar);
bar.connect(baz);
baz.connect();

或:

foo.connect( bar.connect( baz.connect() ) );

(我知道这是简要解释,如果需要我可以解释得更好)

因此,我试图重载运算符“>>”以在主函数中包含类似这样的内容:

foo >> bar >> baz;

对于第一个运算符,它可以工作,所以如果我简单地执行以下操作,它就可以正常工作:

foo >> bar.connect(baz.connect);

但是,当我设置另一个“>>”运算符时,g++ 返回此错误:

error: no match for ‘operator>>’ in ‘operator>>((* & foo), (* & bar)) >> baz.baz::connect()’

我想我没有正确地重载运算符“>>”:

bar& operator>> (bar &br, baz &bz)
{
...
}

感谢您的帮助:)

最佳答案

运算符并不是什么神奇的东西:它们只是以一种有趣的方式拼写的函数。也就是你的声明

foo >> bar >> baz;

实际上只是调用[或尝试调用]

operator>> (operator>> (foo, bar), baz);

也就是说,你需要运算符

bar& operator>> (foo& f, bar& b) {
f.connect(b);
return b;
}
bar& operator>> (bar& b0, baz& b1) {
return b0.connect(b1);
}

请注意,您使用的最后一个 connect() 将无法使用 operator>>(),因为该运算符始终采用两个参数。

关于C++ 重载运算符 '>>',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20788307/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com