我的运算符重载是否有效<<(流插入)左操作数不是 ostream
Does my overload of operator<< (stream insertion) with a left operand not being an ostream is valid
考虑上下文,我想写入另一个文件描述符而不是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<<
那么是的,您以有效的方式实现了它。
您的代码似乎是正确的。它是否做你想做的事,只有你能决定。
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 控制允许动态运行c++的并发操作数
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 为什么C++逐位AND运算符在不同大小的操作数中表现为这样
- <<操作员在下面的行中工作
- 错误 C2679:二进制"<<":未找到采用类型 'std::string_view' 的右侧操作数的运算符(或者没有可接受的转换)
- C++ 带有向量的 IF 计算操作数
- 是否所有C++运算符都接受操作数?
- 一元*运算符的操作数是否期望一个 prvalue
- 与'operator='不匹配(操作数类型'String'且"void")
- 不正确的操作数类型 MSVC
- C2678 二进制 '==':未找到采用 'Card' 类型左操作数的运算符(或者没有可接受的转换)
- 错误:类型"double()"和"double()"的操作数无效到二进制&quo
- 我的运算符重载是否有效<<(流插入)左操作数不是 ostream
- 没有运算符"="与这些操作数匹配,JUCE 窗口演示应用程序
- 如果我在指针中使用 ++ 操作数,我的值就会出错
- 二进制表达式的操作数无效 - 使用 for 和迭代器
- C2679 二进制"<<":未找到采用右操作数类型的运算符
- CPP 运算符重载操作数位置 [] 与 ==