Как в конструктор класса добавить возможность выбора потока для вывода информации (cout или cerr)?
Имеется класс LogDuration в заголовочном файле, которым я высчитываю время работы функции и вывожу информацию в поток cout. Вызов идёт с одним аргументом типа string : LogDuration(someFunc);.
Я хочу расширить класс, чтобы по дефолту информация выводилась в поток cerr, а при вызове со вторым аргументом типа ostream в cout: LogDuration(someFunc, cout);.
Сделать это я хочу через конструктор, но он всячески ругается при попытке присвоения переменной типа ostream какого - либо значения ошибкой
на функцию нельзя ссылаться так как эта функция удалена
Вот код:
#include <chrono>
#include <iostream>
#include <ostream>
class LogDuration {
public:
using Clock = std::chrono::steady_clock;
LogDuration() = default;
LogDuration(const std::string& id, ostream& out)
: id_(id), out_(out) { //В этой строке сразу после out_ выдаёт ошибку, указанную выше
}
~LogDuration() {
using namespace std::chrono;
using namespace std::literals;
const auto end_time = Clock::now();
const auto dur = end_time - start_time_;
out_ << id_ << ": "s << duration_cast<milliseconds>(dur).count() << " ms"s << std::endl;
}
private:
const std::string id_;
const Clock::time_point start_time_ = Clock::now();
std::ostream out_;
};
Не знаю, что делать. Поиск в гугле ничего не дал.
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Весь ответ - в одной строчке:
std::ostream& out_;
Ну и раз
по дефолту информация выводилась в поток cerr
то
LogDuration(const std::string& id, ostream& out = cerr)
и
std::ostream& out_ = cerr;