我无法实现>>运营商
ostream&operator>>(Mode&refMode,ostream&os)
执行链接操作
refMode.iMode>>(refMode.jMode>>os)
请你帮我一个实现吗?
答案 0 :(得分:2)
对不起,但是运营商>>和<<是左关联运算符。您根本无法执行obj1 >> obj2 >> obj3 >> stream
之类的操作并期望它能正常工作。在最好的情况下,您需要大量的括号:obj1 >> (obj2 >> (obj3 >> stream))
。
使用传统语法:
std::ostream& operator << (std::ostream& stream, const MyObject& obj)
{
stream << obj.variable1 << obj.variable2 << etc etc;
return stream;
}
这种方式stream << obj1 << obj2 << obj3
是可能的。
答案 1 :(得分:1)
Elsewhere,你给了我们你的尝试:
ostream&operator >> (const SomeClass& refToCls, stream&os)
{
refToCls.iVar>>os;
return os;
}
我告诉过你,你仍然需要里面的传统语法,因为你还没有为refToCls.iVar
制作一个反向语法的版本。你的意思是ostream
,而不是stream
:
ostream&operator >> (const SomeClass& refToCls, ostream& os)
{
os << refToCls.iVar;
return os;
}
SomeClass x;
x >> cout;
最后警告这是一个非常糟糕的主意。
答案 2 :(得分:0)
正如Oli在评论中所说,我们 通常 定义operator <<
进行广告宣传。你不应该改变操作符的通常语义只是为了花哨。也就是说,我认为你的想法没有任何其他技术障碍。例如:
#include <iostream>
class A
{
int i;
public:
A(int i = 0):i(i){}
};
std::ostream& operator>>(const A& a, std::ostream& os)
{
return os << a.i;
}
int main()
{
A a(4), b(3);
a >> (b >> std::cout);
}
但你为什么要做这样的事呢?