Я пытаюсь создать дружественный интерфейс для класса ведения журнала в C ++.Конечной целью этого упражнения является создание единого определения, которое может меняться в зависимости от используемого уровня:
MODULE_LOG(name, LOG_ALARM);
Существует несколько уровней, но я хочу изменить только указанное выше определение.например, чтобы регистрировать сообщения также, это изменится на:
MODULE_LOG(name, LOG_MESSAGE, LOG_ALARM);
Идея состоит в том, что код будет иметь определение печати, которое будет определено / undef, как запрошено в определении MODULE_LOG.Поэтому, если LOG_MESSAGE не был определен, то макрос печати сообщения будет определен как пустой, в противном случае, если он находится в списке, он напечатает.используя переменные.Моя идея состоит в том, чтобы создать набор переменных на основе переданных уровней. Например,
#define LOG_LEVEL(lvl,val) \
static int LOG_LEVEL_##lvl = val
Однако я столкнулся с другой проблемой, связанной с использованием макроса с переменными числами в C ++.Кажется, я не могу заставить макрос создавать несколько имен (т. Е. Пользователь передает LOG_MESSAGE и LOG_ALARM, создается только одно из них).Кроме того, мне не удалось динамически установить отдельные значения.
Итак, мои вопросы:
Есть ли способ определить / отменить определение макроса печати с помощью определений?
Можно ли использовать переменные макросы для перебора списка, переданного ему, и создания переменной по мере необходимости?
Спасибо.
РЕДАКТИРОВАТЬ - не может использовать повышение.