Я использовал LOG_MACRO (..) в своем проекте, который я хочу обновить, чтобы он ничего не делал, если он используется в некоторых определенных классах.Я сделал это по шаблонной специализации.но я получаю ошибку компиляции в статических функциях.поскольку «this» там недоступно.
Мне нужен магический макрос, чтобы дать мне класс текущей функции-члена.если я использую его в статической функции, он должен дать void.
template<class T> struct ZZLogDisable { static constexpr bool Value = false; };
//this will give me compile error if used in static functions since this is not available there
#define LOG_MACRO(msg) if(!ZZLogDisable<std::remove_reference<decltype(*this)>::type>::Value) { printf(msg); }
//disable logging for a class
#define DISABLE_LOG(Class) template<> struct ZZLogDisable<Class> { static constexpr bool Value = true; };