如何更改C ++输出流以引用cout?

时间:2011-08-20 01:45:06

标签: c++ stream cout

我有一个类,我希望将输出流作为成员提供给:

class GameBase {
protected:
    ofstream m_OutputWriter;
...
}

此类中有一个方法接受一个字符串参数并打开m_OutputWriter指向该文件,因此可以使用标准<<<<<<<<操作者;

但是,我想要的是默认情况下让流指向cout,这样如果未指定输出路径,输出将转到控制台输出而不是文件,并且它将完全透明调用类,谁将使用

m_OutputWriter << data << endl;

将数据输出到预定目的地。然而,我在这里尝试了其他一些例子,但这些例子似乎都不符合我的目的。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:2)

为什么流需要成为会员?

struct GameBase {
    void out(std::ostream& out = std::cout);
    // ...
};

答案 1 :(得分:1)

除了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";
}