如何更改c++输出流以引用cout ?
How do I change a C++ output stream to refer to cout?
我有一个类,我想给一个输出流作为成员,即:
class GameBase {
protected:
ofstream m_OutputWriter;
...
}
在这个类中有一个方法,它接受一个字符串参数并打开m_outputwwriter来指向那个文件,所以数据可以通过使用标准的<<
操作符;然而,我想要的是在默认情况下使流指向cout,这样,如果没有指定输出路径,输出将转到控制台输出而不是文件,并且它将完全透明的调用类,谁将使用
m_OutputWriter << data << endl;
将数据输出到预定的目的地。然而,我已经尝试了这里的其他几个例子,它们似乎都不适合我要做的。
我在这里错过了什么?
为什么流必须是成员?
struct GameBase {
void out(std::ostream& out = std::cout);
// ...
};
除了将std::ofstream
作为成员外,我还将使用返回std::ostream&
的函数。
class GameBase {
std::ofstream m_OutputWriter;
protected:
std::ostream& getOutputWriter() {
if (m_OutputWriter)
return m_OutputWriter;
else
return std::cout;
}
...
}
功能完整的示例:
#include <iostream>
#include <ostream>
std::ostream& get() {
return std::cout;
}
int main() {
get() << "Hello world!n";
}
相关文章:
- 将对象数组的引用传递给函数
- 什么时候在C++中返回常量引用是个好主意
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 何时在引用或唯一指针上使用移动语义
- 如何在c++中使用引用实现类似python的行为
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 编译C++时未定义的引用
- 有没有办法在不使用命名空间 std 或前缀 std:: 的情况下引用 cout?
- 为什么取消引用的指针指向指针的 std::cout 会导致 -fsanitize=地址投诉?
- 引用 std::cout 会导致段错误
- 使用cout,如何将char转换为变量的地址/引用(?)
- 在更改文件描述符 1 以引用其他文件后,我应该如何管理 ::std::cout?
- 对象层次结构员工程序 - 取消引用 cout 的指针
- 重载cout时未定义引用
- c++ cout给出带解引用指针的unexpected
- 操作符重载- cout和cin——ostream函数,不能被引用——它是一个已删除的函数
- 如何更改c++输出流以引用cout ?
- C++ SegFault 在取消引用 cout 的指针时
- 不断收到"错误:使用未声明的标识符'cout'和错误:无法解析对重载函数的引用
- 将cout引用到一个变量位置(文件或cmd)