Я хочу иметь больше контроля над макросами, такими как утверждения (и некоторые макросы журналов, которые не находятся под моим непосредственным контролем). Поэтому я решил сделать что-то подобное, ожидая, что это сработает (в случае, если кому-то интересно, причина, по которой это не работает, заключается в том, что последний undef
из MY_ASSERT_COPY
делает недействительным MY_ASSERT
прямо перед ним).
#ifndef ENABLE_FULL_ERROR_ASSERTS
#define MY_ASSERT_COPY MY_ASSERT
#undef MY_ASSERT
#define MY_ASSERT
#endif
// Code for my current class, which happens to be header only
#ifndef ENABLE_FULL_ERROR_ASSERTS
#undef MY_ASSERT
#define MY_ASSERT MY_ASSERT_COPY
#undef MY_ASSERT_COPY
#endif
Теперь я знаю несколько способов обойти это, один из которых заключается в определении другого макроса для утверждений только для этого файла, который я затем могу отключить, не затрагивая утверждения в любой другой части программы. Сначала я думал, что это действительно элегантное решение (до того, как выяснил, что оно не компилируется), которое позволит мне использовать MY_ASSERT
везде, а затем просто отключить его для определенных файлов.
Поскольку вышеприведенное не работает, есть ли обходной путь, который позволит мне выборочно уничтожать макрос, не затрагивая окружающий код и не определяя другой замещающий макрос, такой как #define MY_ASSERT_FOR_VECTORS MY_ASSERT