类方法的C++插入运算符

C++ insertion operator for class method

本文关键字:运算符 插入 C++ 类方法      更新时间:2023-10-16

C++有没有办法将插入运算符用于类方法?

operator<<重载正在工作:

class Complex {
public:
//Normal overload:
friend std::ostream& operator<<(std::ostream &out, const Complex &o) {
out << "test overload";
return out;
}
Complex() {};
~Complex() {};
};

我可以这样做:

int main()
{
Complex* o = new Complex();
std::cout << "This is test: " << *o << "." << std::endl; // => This is test: test overload.
}

我知道流操纵器,像这样:

std::ostream& welcome(std::ostream& out)
{
int data = 1;
out << "WELCOME " << data << "rn";
return out;
}
int main()
{
std::cout << "Hello " << welcome; // => "Hello WELCOME 1rn"
}

如何将welcome方法放入Complex类中,然后如何从cout调用它(请注意,欢迎方法必须访问一些类成员变量(?

我的试用版:

class Complex {
public:
//Normal overload:
friend std::ostream& operator<<(std::ostream &out, const Complex &o) {
out << "test overload";
return out;
}
std::ostream& welcome(std::ostream& out) {
out << "WELCOME " << data << "rn";
return out;
}
Complex() { data = 1; };
~Complex() {};
private:
int data;
};
int main()
{
Complex* o = new Complex();
std::cout << "This is test2: " << o->welcome << std::endl; // compile error
}

选择不同<<重载的一种简单方法是使用不同的类型。

#include <iostream>
class Complex {
public:
//Normal overload:
friend std::ostream& operator<<(std::ostream &out, const Complex &o) {
out << "test overload";
return out;
}
struct extra_info {
const Complex& parent;
extra_info(const Complex& p) : parent(p) {}
friend std::ostream& operator<<(std::ostream& out, const extra_info& ei){
int i = 1;
out << "extrainfo " << i;
return out;
}
};
extra_info extrainfo() {
return {*this};
}
Complex() {};
~Complex() {};
};

int main() {
Complex c;
std::cout << c << "n";
std::cout << c.extrainfo();
}

输出:

test overload
extrainfo 1

我想在你的真实代码中你正在使用成员。因此,帮助程序类型必须包含对Complex实例的引用。