好的,我无法执行以下代码:
我想连接我的自定义操纵器。
因此将像调用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
了。