QDebug-подобная структура: определить конец ввода с помощью `operator<<`

Qt имеет хорошую функцию отладки, которая называется так

qDebug() << first_qobject << second_qobject;

он создает строку с некоторыми "стандартными для строки" объектами и - и это важная часть - печатает \n и промыл пар после second_object, Я хочу воспроизвести это поведение по соглашению, согласно которому все мои классы имеют std::string to_string() метод, который я называю:

struct myDebug{
   template<typename T>
   myDebug& operator<<(T t){
       std::cout << t.to_string() << " "; // space-separated
       return *this;
   }
};

struct Point{
    std::string to_string(){ return "42"; }
};

myDebug() << Point() << Point(); // should produce "42 42" plus a newline (which it doesn't)

Мой вопрос сейчас: есть ли способ узнать, что после возвращения *this второй раз возвращаемый объект больше не вызывается? Так что я могу распечатать std::endl? qDebug() кажется, в состоянии сделать это.

1 ответ

Нашел решение и выяснил, что мой вопрос тоже дубликат:

Как работает QDebug() << вещи; добавить новую строку автоматически?

Короче говоря, это может быть сделано путем реализации деструктора и просто создать временный MyDebug объекты, как я сделал это в коде выше и qDebug Является ли:

MyDebug() << foo << bar;
// will be destroyed after passing bar, and in the destructor I can now flush.
Другие вопросы по тегам