Страницы

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

пятница, 19 октября 2018 г.

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

У меня есть класс Console, который формирует строку и выводит ее на экран (Имеется ввиду не DOS консоль, а своя собственная в окне приложения). Чтобы вывести на нее информацию, приходится писать так:
std::ostringstream os; os << "value X = " << x; console.print(os.str());
Каждый раз так писать очень неудобно, хочется использовать класс так же, как и при работе со стандартными потоками ввода/вывода, примерно так:
console << "value X = " << x; //или через функцию метод conslole.get() << "value X = " x;
Есть способ реализовать такое? Желательно без сторонних библиотек


Ответ

Если вы хотите, чтобы ваш класс выглядел как 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;
Если же вам нужно, чтобы ваш класс являлся потоком вывода, придётся наследоваться от базовых классов потоков вывода и переопределять их методы.

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

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