【发布时间】:2019-03-15 17:08:27
【问题描述】:
考虑上下文,我想写入另一个文件描述符而不是 stdout。在这里,我的“写”方法打印到标准输出,但仅用于理解。
这是我要解决的主要问题:
我有一个 write(char*) 方法,我想通过 operator
期间。
虽然,在互联网上,没有任何地方可以找到一个例子,它在左操作数上使用除了 ostream 之外的任何东西来重载 operator
编辑:这怎么可能是重复的?我很感兴趣,为什么您链接的主题以及 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";
}
【问题讨论】:
-
这取决于您希望
operator<<对Ter的含义。在这种情况下,它看起来确实想成为std::ostream。 -
通常情况下,当你重载一个操作符时,你应该做它内置的对应操作。在 C++ 中,
>>和<<是按位运算或流式处理。如果你想连接一些东西,那么使用+和+=。 -
@stalker2106: "我敢于你在互联网上的某个地方找到一个运算符" Boost.Spirit。还有Boost.Serialization;档案are not streams。还有 Boost 的动态 bitset 类型。
-
很难将其解读为一个明确、具体的问题。 “为什么人们总是...”他们并不总是。 “无处可寻……” 有。 “这是否意味着我的例子是一个罕见的案例......”不,这并不意味着。
-
@stalker2106:我没有将您链接到代码;我将您链接到库。您可以自己在这些库中查找代码。
标签: c++ operator-overloading std