В настоящее время я добавляю некоторые функции в нашу библиотеку журналов. Одним из них является возможность объявить имя модуля для класса, который автоматически добавляется к любым сообщениям журнала, записываемым из этого класса. Однако, если имя модуля не указано, ничего не добавляется. В настоящее время я использую класс trait, который имеет статическую функцию, которая возвращает имя.
template< class T >
struct ModuleNameTrait {
static std::string Value() { return ""; }
};
template< >
struct ModuleNameTrait< Foo > {
static std::string Value() { return "Foo"; }
};
Этот класс можно определить с помощью вспомогательного макроса. Недостатком является то, что имя модуля должно быть объявлено вне класса. Я хотел бы, чтобы это было возможно в классе. Кроме того, я хочу иметь возможность удалить весь лог-код, используя директиву препроцессора. Я знаю, что с помощью SFINAE можно проверить, есть ли у аргумента шаблона определенный член, но поскольку другие люди, которые не так дружат с шаблонами, как я, должны будут поддерживать код, я ищу гораздо более простое решение. Если их нет, я буду придерживаться подхода черт.
Заранее спасибо!