У меня есть класс 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
std::string to_string() const { return os.str(); }
};
Источник
Теперь вы можете использовать вашу консоль как поток вывода:
Console con;
con << "abc" << 123;
Если же вам нужно, чтобы ваш класс являлся потоком вывода, придётся наследоваться от базовых классов потоков вывода и переопределять их методы.
Комментариев нет:
Отправить комментарий