Как изменить поток вывода C ++, чтобы он ссылался на cout? - PullRequest
2 голосов
/ 20 августа 2011

У меня есть класс, которому я хочу дать выходной поток в качестве члена:

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

В этом классе есть метод, который принимает строковый аргумент и открывает m_OutputWriter для указания наэтот файл, поэтому данные могут быть выведены в этот файл с помощью стандартного оператора <<; </p>

. Однако мне бы хотелось, чтобы поток по умолчанию указывал на cout, так что если путь вывода неЕсли указан, выходной файл передается на консольный вывод, а не в файл, и вызывающий класс будет полностью прозрачным, который будет использовать

m_OutputWriter << data << endl;

для вывода данных в заранее определенный пункт назначения.Тем не менее, я попробовал пару других примеров здесь, и ни один из них точно не соответствует тому, что я пытаюсь сделать.

Что мне здесь не хватает?

Ответы [ 2 ]

2 голосов
/ 20 августа 2011

Почему поток должен быть участником?

struct GameBase {
    void out(std::ostream& out = std::cout);
    // ...
};
1 голос
/ 20 августа 2011

В дополнение к наличию 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";
}
...