Как лучше сделать сабж? Нужен обычный поток (или что-то на него похожее), который либо превратится в std::cerr, либо уйдёт из кода.
Я пробовал так:
// debug.hpp
#include <iostream>
static struct Debug {
template <typename T> Debug& operator<<(T arg)
{
(void)arg;
#ifdef DEBUG
std::cerr << arg;
#endif
return *this;
}
} dbg;
// main.cpp
#include "debug.hpp"
//#include <qapplication.h>
int main()
{
dbg << "Hello" << std::endl;
}
test.cpp: In function `int main()':
main.cpp:6: no match for `Debug & << {unknown type}'
/usr/lib/qt-3.3.3/include/qcstring.h:135: candidates are: class QDataStream & operator <<(QDataStream &, const QByteArray &)
/usr/lib/qt-3.3.3/include/qcstring.h:243: class QDataStream & operator <<(QDataStream &, const QCString &)
/usr/lib/qt-3.3.3/include/qstring.h:828: class QDataStream & operator <<(QDataStream &, const QString &)
/usr/lib/qt-3.3.3/include/qpoint.h:103: class QDataStream & operator <<(QDataStream &, const QPoint &)
...
1. Почему не работает в таком виде?
2. Можно ли сделать лучше (но не сильно сложнее)?