код:
template <typename T> Logger& operator<<(T val) {
if constexpr (std::is_convertible<T, std::string>::value {
log(shift_level, val);
} else {
log(shift_level, std::to_string(val));
}
return *this;
}
На коде
*Logger::instance() << "Hello" << 343 << "Goodbye"; логируется Hello 3 раза.
Если качественно написать перегрузку, то все работать будет нормально, я видимо не понял как if constexpr работает?
Тут всё не так очевидно)
struct Logger { void log(const std::string& str) {qDebug() << str.c_str();} template <typename T> Logger& operator<<(T val) { if constexpr (std::is_convertible<T, std::string>::value) { log(val); } else { log(std::to_string(val)); } return *this; } }; int main() { auto ptr = new Logger; (*ptr) << "Hello" << 343 << "Goodbye"; } выводит как надо)
Обсуждают сегодня