C++重载<<运算符

Mir*_*rko 1 c++ operator-overloading

我需要重载<<运算符for streams以使用内置类型.对于字符串来说这不是问题,因为我只是像这样重载函数:

ostream& operator<<(ostream& os, const char* str) { /*...*/ }
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为此功能是全局的,而不是成员.问题是我需要为其他基本类型(整数,浮点数等)重载<<运算符,但这些是成员函数.有没有办法可以做到这一点?我需要它不仅可以用于cout,还可以用于其他流.提前致谢.

Ste*_*sop 6

您不应该尝试更改操作员的std::cout << 3;操作.它是标准API的一部分.如果您需要以某种格式输出哪些流操纵器无法支持,那么例如您可以编写一个小包装器:

struct MyFormatter {
    MyFormatter (ostream &o) : o(o) {}
    ostream &o;
};

MyFormatter &operator<<(MyFormatter &mf, int i) {
    mf.o << "int(" << i << ")"; // or whatever
    return mf;
}
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它:

MyFormatter mf(std::cout);
mf << 1 << "," << 2 << "," << 3;
Run Code Online (Sandbox Code Playgroud)