Как передать ostream объекты?

у меня есть такая структура

struct X{
ostream out;
X() : out(cout) {}
...
};

и я заметил, что я должен определиться с & правильно передать cout в качестве параметра по умолчанию: ostream &out; Я не знаю почему, и я не знаю, есть ли другие возможности сохранить ostream без &, Кроме того, когда я пытаюсь установить

X x;
ofstream out;
x.out = out;

компилятор обнаружил много ошибок … Я хочу иметь возможность установить X :: out для cout или ofstream. Как это сделать?

0

Решение

ostreams не могут быть переданы по значению. Вы должны пройти по ссылке или указателю.

Если вы хотите умение сделать x.out ссылаться на различные потоки в течение его времени жизни, а затем сделать его указателем. В противном случае сделайте это ссылкой.

1

Другие решения

Лучшее, что вы можете сделать, это изменить дизайн вашего класса, чтобы вам больше не нужно инициализировать переменную-член. Копирование предотвращается компилятором, решения, основанные на указателях, приведут к проблемам владения, std::shared_ptr создает проблемы с std::coutи ссылочный член создаст возможность висячих ссылок.

Попробуйте реорганизовать ваш код так, чтобы поток всегда передавался как ссылка на методы извне, когда это необходимо:

struct X{
X() {}
void f(std::ostream &os);
};
2

Объект потока не может быть скопирован, вам нужно использовать ссылку.

struct X{
ostream& out;

X() :out( std::cout ) {}

// X( ostream& out_ = std::cout ) : out( out_ ) {}

};
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector