定义>>操作者

时间:2011-08-13 20:10:36

标签: c++

我无法实现>>运营商

ostream&operator>>(Mode&refMode,ostream&os)

执行链接操作

refMode.iMode>>(refMode.jMode>>os)

请你帮我一个实现吗?

3 个答案:

答案 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);
}

但你为什么要做这样的事呢?