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.