好的,我无法执行以下代码:
我想连接我的自定义操纵器。
因此将像调用cout << endl一样调用它们。
例如我想要这个:

   emit << event1 << event2 << event3;


这是我的代码:

class Emit
{
public:
                // ...
    const void operator<<(const Event& _event) const;
}const emit; // note this global

inline const void Emit::operator<<(const Event& _event) const
{
    Start(_event);
}


class Event
{
               // ...
         const Event& Event::operator<<(const Event& _event) const;
};

inline const Event& Event::operator<<(const Event& _event) const
{
    return _event;
}


但是我不能这样称呼:

 emit << event1 << event2 << event3;


我什至会收到编译时错误,链接时错误以及代码中发生的任何更改,但我得到的核心错误均未成功。

例如这个:


  错误1错误C2679:二进制'<  类型为'const EventHandling :: Event'的右侧操作数(或者
  没有可接受的转换)c:\ users \ admin \ documents \ visual studio
  2010 \ projects \ cppsystem \ eventhandling \ test.h 18


非常感谢。

最佳答案

这些运算符从左到右调用。这样,第一个调用(emit << event1)必须返回对Emit的引用:

class Emit
{
public:
    // ...
    Emit const& operator<<(const Event& _event) const;
}const emit; // note this global

Emit const& Emit::operator<<(const Event& _event) const
{
    Start(_event);
    return *this;
}


现在,您不再需要在operator<<类中重载Event了。

10-06 02:45