5;
const char* b = "fsdfds";
LOG("hello",a,........,myType, b)
И ещё, в конце я енум добавлять должен, типа MessageType::Success
Тоесть в конце:
LOG(a,b,c,d,e,MessageType::Success)
#define SOMETHING(a, b, ...) something<a>(b, __VA_ARGS__) ?
namespace LogHelper { template <typename... Args> void PrintErr(Args&&... args) { (std::cerr << RED_TEXT << "[ERROR]" << ... << std::forward<Args>(args)) << RESET_COLOR << std::endl; } template <typename... Args> void PrintWarn(Args&&... args) { (std::cerr << YELLOW_TEXT << "[WARN]" << ... << std::forward<Args>(args)) << RESET_COLOR << std::endl; } template <typename... Args> void PrintSucc(Args&&... args) { (std::cerr << GREEN_TEXT << "[WARN]" << ... << std::forward<Args>(args)) << RESET_COLOR << std::endl; } template <typename... Args> void printLog(Args&&... args) { (std::cout << ... << std::forward<Args>(args)) << std::endl; } } вот так придумал, что думаешь? #define LOG_ERROR(...) LogHelper::PrintErr(__VA__ARGS__) #define LOG_WARN(...) LogHelper::PrintErr(__VA__ARGS__) #define LOG_SUCCESS(...) LogHelper::PrintErr(__VA__ARGS__)
А зачем там макрос с вариадиком? В чем проблема раскрывать макрос в создание логера, у которого будет какой-нибудь оператор <<?
чтобы можно было на NDEBUG вырубать
это и так можно, но макросом удобнее
Так вопрос не в отсутствии макроса
Такой оператор в принципе крайне часто критикуется. Лучше делать по образу fmt::format
а почему критикуется? За неочевидность?
За неудобность во всех смыслах
Обсуждают сегодня