提问人:f1msch 提问时间:10/31/2023 更新时间:10/31/2023 访问量:59
如何在新类中运算符重载fstream?[复制]
How to operator overload fstream in a new class? [duplicate]
问:
我想包装一个新类来生成一个文件,并对新文件进行一些自动资源回收和一些额外的操作。 所以我做了一个新类,比如
class TmpFile {
private:
std::string tmp_file_name;
std::ofstream tmp_file;
public:
TmpFile(const std::string &name) :tmp_file_name(name),
tmp_file(tmp_file_name, ios::out | ios::trunc) {}
~TmpFile() {
tmp_file.close();
//some operate afterwards using tmp_file
...
}
};
但是有没有办法让运算符重载“<<”以写入“类 TmpFile”中的文件,例如
TmpFile f;
f << "asd";
答:
0赞
Austin Yang
10/31/2023
#1
如果只想接受一个带有“<<”运算符的对象,可以直接覆盖它:
class TmpFile {
private:
std::string tmp_file_name;
std::ofstream tmp_file;
public:
TmpFile(const std::string &name) :tmp_file_name(name),
tmp_file(tmp_file_name, ios::out | ios::trunc) {}
~TmpFile() {
tmp_file.close();
//some operate afterwards using tmp_file
...
}
// here define your operator
void operator << (const std::string& str) {
// do something
}
};
如果你想接受多个对象,用一个运算符<<,你可以这样检查特征库是如何实现的,例如:
f << "asdf", "efsjkfl"
评论
void operator<<(const std::string& str) { }