Я не пойму как можно определить функцию, чтобы можно было писать такое:
qDebug() << "hello world";
В данном примере надо как-то определить функцию qDebug(), но как? Если можно, то ответ кодом напишите.
Такая функция возвращает объект, к которому применим operator<<. Простейшим способом написать аналог будет такой:
std::ostream& debug()
{
return std::cout;
}
И это можно использовать как у Вас в примере:
debug() << "Hello!";
qDebug() может быть реализована схожим образом (но реально это макрос, который несколько по-другому реализован), просто возвращать ссылку на объект QDebug, а не std::ostream.
Помимо уже сказанного про применимость operator<< к результату qDebug(), у класса QDebug (возвращаемый из макроса qDebug) есть ещё одна особенность, заключающаяся в автоматическом переводе курсора вывода на новую строку, т.е. нет явной необходимости добавлять '\n' в конце. С одной стороны это удобно, с другой - несколько раздражает. А реализовано это через обычный деструктор класса, который вызывается при уничтожении объекта QDebug, который создаётся каждым новым вызовом qDebug(). Вариант реализации:
#include <iostream>
struct D {
~D() { std::cout << "\n"; }
template <typename T>
D& operator<< (const T& t)
{
std::cout << t << " ";
return *this;
}
};
D deb() { return D(); }
int main()
{
deb() << 42 << "string" << 100.5;
}
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости