我的operator <<(流插入)的重载且左操作数不是ostream是否有效?

时间:2018-10-10 17:53:52

标签: c++ operator-overloading std

考虑上下文,我想在其中写入除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";
}

1 个答案:

答案 0 :(得分:1)

  

我很奇怪为什么您链接的主题以及   https://arne-mertz.de/2015/01/operator-overloading-common-practice/或   许多其他人从来没有谈论过其他类型的左操作数   ostream。

因为这并不重要。适用于std::ostream的内容适用于其他类型。抱歉,但是有点像获取示例来重载类型operator+的示例Foo,然后抱怨您从未得到如何重载Bar的示例。如果您希望您的类型提供operator<<,那么可以,您可以通过可行的方式实现它。

您的代码似乎是正确的。是否满足您的要求,只有您自己决定。