Я перегружен класс различными <<
операторами
inline QString operator<<(bool boolean) {
return (boolean ? QString("true") : QString("false"));
}
inline QString operator<<(char const *string) {
return QString(string);
}
inline QString operator<<(int number) {
return QString::number(number);
}
В основном я хочу написать отладочный вывод, который фиксирует выражение, например:
#define DEBUG(...)
DEBUG(QString("foobar"), someObject.toInt());
// Expression 1: """QString("foobar")"""
// Expression 2: """someObject.toInt()"""
И объединяет его с оценкой:
#define DEBUG(...)
DEBUG(QString("foobar"), someObject.toInt());
// Evaluation 1: "foobar"
// Evaluation 2: "1234"
Предварительно все с
__FILE__;
QString::number(__LINE__);
__PRETTY_FUNCTION__;
И он должен вывести что-то вроде этого:
#define DEBUG(...)
DEBUG(QString("foobar"), someObject.toInt());
///////////////// Output /////////////////
File: /home/akiva/Programming/MyApp/source.cpp
Line: 123
Func: void doSomething();
QString("foobar")
"foobar"
someObject.toInt()
"1234"
У меня возникли проблемы с этим, поскольку рекурсивные макросы variadi c не совсем законны. У меня также есть некоторые дополнительные трудности, так как мой предыдущий метод использования шаблонов variadi c в сочетании с std::forward
, насколько я могу судить, не работает в веб-сборке. В идеале решение после тестирования также будет совместимо с Wasm.
Спасибо.