如何临时使用std::cout来代替std::ofstream
how to temporarily use std::cout in place of std::ofstream
如果我想创建一个日志记录类,比如
class logging_class {
public:
std::ofstream error;
std::ofstream event;
logging_class() {}
logging_class(string err, string evt) {
error.open(err);
event.open(evt);
}
~logging_class() {
error.close();
event.close();
}
};
这样以后我就可以轻松地创建程序日志:
logging_class logger("Log_Error.txt","Log_Event.txt");
logger.error << "something wrong";
logger.event << "something interesting";
现在,在开发的早期阶段,我想将所有输出重定向到屏幕(即std::cout(。我不想将logger.error<<"something wrong";
的用法更改为std::cout<<"something wrong";
,因为以后我需要将std::cout
的所有实例更改为logger.error
或logger.event
(可能有数千个(。我可以在类记录器中进行一些简单的更改吗?
更新:根据Enlico的指示,我可以将logging_class
修改为:
class logging_class {
public:
//std::ofstream error;
//std::ofstream event;
std::ostream& error;
std::ostream& event;
logging_class():error(std::cout),event(std::cout) {}
//logging_class(string err, string evt) {
// error.open(err);
// event.open(evt);
//}
//~logging_class() {
// error.close();
// event.close();
//}
};
并且在使用默认构造函数创建对象之后:logging_class logger;
我现在可以将所有日志重定向到屏幕显示。
想想std::cout
的实际情况:一个对象。只是:
全局对象
std::cout
和std::wcout
控制输出到〔…〕
因此,当您说要暂时使用std::cout
来代替std::ofstream
时,您是在将苹果(对象std::cout
(与桔子(类std::ofstream
(混合。
相反,您要做的是使用std::cout
而不是类std::ofstream
的对象。
但是std::cout
不属于std::ofstream
类,所以error
不能容纳它;它属于std::ostream
类,是前者的超类。
因此,如注释中所建议的,您可以使error
/event
引用该类的对象std::ofstream
std::ostream&
,并通过logging_class
的适当构造函数使用std::cout
或std::ofstream{"filename.txt"}
初始化它们。
相关文章:
- std::ofstream 作为类成员删除复制构造函数?
- C++:std::ofstream 方法 open() 在第二次迭代时擦除打开的 ifstream 文件
- 如何在 std::ofstream 和 std::cerr 之间切换
- 为什么将字符串输出到未命名的 std::ofstream 反而给了我一个十六进制数?
- 如何使用 std::cout 或 std::ofstream 作为单个函数的输入?
- 将 boost stream_buffer 与 std::ofstream 结合使用
- 对 std::ofstream 进行空文件检查
- 将 std::ofstream 对象作为参数传递给类方法
- 为什么 std::ofstream 会在没有 std::ios_base::trunc 的情况下截断?
- std :: ofstream,覆盖错误的文件行
- std :: ofstream-没有比1023(即时冲洗)更长的缓冲字符串
- 如何超载std :: ofstream :: put()
- 返回"Cannot convert from 'std::ofstream {aka std::basic_ofstream<char>}' to bool"错误
- std::ofstream 会自动在 之后添加回车符 (CR; \r)
- std::ofstream 追加文件
- 使用std:ofstream时,将目录的副本检查到文件中
- C++线程:无法将参数 1 从 'const std::ofstream' 转换为 'std::ofstream &'
- 为浮点数配置std :: ofStream格式
- 重定向std:cout到std::ofstream,得到一个错误
- 使用std :: ofstream中的c 中的float变量输出