如何更改c++输出流以引用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";
}

最新更新