实现功能齐全的移位流语法

Achieve full-featured shift stream syntax

本文关键字:语法 功能齐全 实现      更新时间:2023-10-16

在我的类中,我重载了运算符<lt;以实现

MyObject << something1 << something2;
friend const std::string& operator<<(Logger& os, const std::string& msg);

但我只能做到:

MyObject<lt;某事1;

如果我添加第二个流输入(something2),我会得到一个编译器错误,告诉我没有用于输入之类的运算符。

因此,我的问题是:我如何才能达到预期的语法?

<<必须返回流(作为引用)。换句话说,它应该返回其第一个(左侧)参数。

os << v1 << v2被解析为(os << v1) << v2,因此对于使用相同重载运算符的外部调用,os << v1的结果最好与os的类型相同。

好的,我发现了问题。我需要返回MyObject作为参考:

friend Logger& operator<<(Logger& os, const std::string& msg);