Элемент управления, специфичный для экземпляра класса, необходимый для кода, сгенерированного макросом - PullRequest
0 голосов
/ 28 октября 2019

Я пишу общие функции ведения журнала для использования в среде C ++. Он содержит msg_Log_level и message, и в зависимости от настроенного во время выполнения log_level, печатается сообщение или нет. Я хочу иметь настроенный_уровень_уровня на уровне экземпляра класса вместо глобального элемента управления. Как я это сделал.

Предположим, я принимаю log_level от 0 до 4. Теперь пользователь может вызывать LOG_INFO (0, "hello world_0");или LOG_INFO (2, "привет, мир_4");Если у меня настроен уровень_лог_ 0, то будет напечатано только самое пожарное сообщение, если настроено-уровень_2 или выше, оба сообщения будут напечатаны.

В этой среде у меня может быть много классов с несколькими экземплярами. Я хочу иметь контроль уровня экземпляра класса для этого макроса. Как мне это сделать. У меня также есть статические функции в классах.

Я думал о том, что в макросе я добавлю еще один аргумент для configure_log_level: Before:

define LOG_INFO (verbosity, f_,. ..) report_info (многословие, (f_), ## VA_ARGS )

После регистрации конкретного экземпляра:

определить LOG_INFO (многословие, f_, ...) report_info(config_log_level, verbosity, (f_), ## VA_ARGS )

И я думал о наличии глобальной переменной:

   int __attribute__((weak)) configured_log_level= 2;

И такая же переменная имени будет вкласс, так что я могу иметь контроль на уровне экземпляра класса. например, в классе ABC,

     ABC::hello(){
         LOG_INFO(2, "hii"); // here, it will use configured_log_level of ABC class instance.
     }

Но у меня также есть некоторые статические функции, поэтому я не могу использовать здесь динамические переменные.

Любые предложения, как мне этого добиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...