Я добавляю немного кода отслеживания и отладки в класс, который я рефакторинг.
У меня есть объект Trace
, который имеет некоторые свойства и методы фильтрации bool CanTrace(Level, , TracePropertyList = no_additional_properties)
и bool Trace(Level, string, TracePropertyList = no_additional_properties)
.
В коде, где используется этот объект трассировки, уже много мест, а строковый аргумент метода Trace
обычно является выражением, которое я бы хотел избежать, если бы я не собирался заканчивать вывод трассировки Информация.
Повторение фрагмента кода
if(trace.CanTrace(LEVEL_INFO, some_props))
trace.Trace(LEVEL_INFO, consume_time().to_str(), some_props);
является уродливым, и мне бы хотелось что-то короче.
Я думал о макросах
#define TRACE_WITH_PROPS(LEVEL,STRING,PROPS) //...
и
#define TRACE(LEVEL,STRING) //...
Есть ли лучший способ сделать это? Возможно с шаблонами или С++ 11? Мне не нравится скрывать вещи от компилятора с помощью define, и я прилагаю все усилия, чтобы удалить некоторые макросы в другом месте этой кодовой базы.