我的运算符重载是否有效<<(流插入)左操作数不是 ostream

Does my overload of operator<< (stream insertion) with a left operand not being an ostream is valid

本文关键字:lt 操作数 ostream 插入 重载 运算符 是否 有效 我的      更新时间:2023-10-16

考虑上下文,我想写入另一个文件描述符而不是stdout。在这里,我的"写入"方法打印到标准输出,但仅用于理解。

这是我试图解决的主要问题:

我有一个 write(char*( 方法,我想通过运算符转换为 c++ 风格的流<<,以便能够用C++编写,混淆多个显式写入调用,允许在一行代码中编写而无需连接或任何其他解决方案。

时期。

但是,在互联网上,除了左侧操作数上的ostream之外,没有任何地方可以找到重载运算符的示例<<ostream。 这是否意味着,我下面的示例(编译! 我在类似 Codepen 的网站上对其进行了测试(是一种罕见的在没有 ostream 的情况下工作过载的情况,还是我误解了整个事情,"Ter"应该是继承的 ostream ?

编辑:这怎么可能是重复的?我很好奇为什么你链接的主题,以及 https://arne-mertz.de/2015/01/operator-overloading-common-practice/或许多其他人从不谈论来自 ostream 以外的其他类型的左操作数。

编辑2:我很难准确地回答我的问题。下面的代码是否是一种好的做法,如果不是,我应该怎么做才能解决我用大写字母支撑的问题。谢谢你的回答

#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";
}

我很好奇为什么你链接的主题,以及 https://arne-mertz.de/2015/01/operator-overloading-common-practice/或 许多其他人从不谈论另一种类型的左操作数 o流。

因为这并不重要。适用于std::ostream的对其他类型的工作类似。抱歉,但这有点像为类型Foo获取重载operator+的示例,然后抱怨您从未获得有关如何为Bar重载它的示例。如果您希望您的类型提供operator<<那么是的,您以有效的方式实现了它。

您的代码似乎是正确的。它是否做你想做的事,只有你能决定。