Страницы

Поиск по вопросам

пятница, 13 декабря 2019 г.

Как создать свой поток (output stream)?

#cpp


У меня есть класс Console, который формирует строку и выводит ее на экран (Имеется
ввиду не DOS консоль, а своя собственная в окне приложения).
Чтобы вывести на нее информацию, приходится писать так:

std::ostringstream os;
os << "value X = " << x;
console.print(os.str());


Каждый раз так писать очень неудобно, хочется использовать класс так же, как и при
работе со стандартными потоками ввода/вывода, примерно так:

console << "value X = " << x;
//или через функцию метод
conslole.get() << "value X = " x;


Есть способ реализовать такое? Желательно без сторонних библиотек
    


Ответы

Ответ 1



Если вы хотите, чтобы ваш класс выглядел как ostream, то всё, что вам нужно сделать - перегрузить оператор <<: class Console { private: std::ostringstream os; public: template Console &operator<<(const T &x) { os << ':' << x << ':'; return *this; } std::string to_string() const { return os.str(); } }; Источник Теперь вы можете использовать вашу консоль как поток вывода: Console con; con << "abc" << 123; Если же вам нужно, чтобы ваш класс являлся потоком вывода, придётся наследоваться от базовых классов потоков вывода и переопределять их методы.

Комментариев нет:

Отправить комментарий