考虑上下文,我想在其中写入除stdout以外的另一个文件描述符。在这里,我的“写入”方法会打印到stdout,但这只是为了理解。
这是我要解决的主要问题:
我有一个write(char *)方法,我想通过operator <<转换为c ++风格的流,以便能够用C ++编写,使多个显式的write调用混淆,从而允许用单行代码编写无需串联或任何其他解决方案。
期限。
但是,在互联网上,没有地方可以找到一个示例,该示例使operator <<重载,而左操作数上的ostream除外。这是否意味着,下面的示例(编译!我在类似Codepen的网站上对其进行了测试)是在没有ostream的情况下工作超载的罕见情况,还是我误解了整个内容,因此“ Ter”应该是继承的ostream吗? / p>
编辑:这怎么可能是重复的?我很奇怪为什么您链接的主题以及https://arne-mertz.de/2015/01/operator-overloading-common-practice/或许多其他主题都从未谈论过ostream之外的其他类型的左操作数。
EDIT2:我很难准确地回答我的问题。以下代码是否是一种好的做法,如果不是,我应该怎么做才能解决我用大写字母引起的问题。谢谢您的回答
#include <iostream>
struct Ter {
void write(const std::string &str) { std::cout << str; }; //Here we should do something else in our context
friend Ter &operator<<(Ter &a, std::string &b);
};
Ter &operator<<(Ter &a, const std::string &b)
{
a.write(b);
return (a);
}
int main()
{
Ter toto;
toto << "b" << "c";
}
答案 0 :(得分:1)
我很奇怪为什么您链接的主题以及 https://arne-mertz.de/2015/01/operator-overloading-common-practice/或 许多其他人从来没有谈论过其他类型的左操作数 ostream。
因为这并不重要。适用于std::ostream
的内容适用于其他类型。抱歉,但是有点像获取示例来重载类型operator+
的示例Foo
,然后抱怨您从未得到如何重载Bar
的示例。如果您希望您的类型提供operator<<
,那么可以,您可以通过可行的方式实现它。
您的代码似乎是正确的。是否满足您的要求,只有您自己决定。