我希望对断言之类的宏有更多的控制权(以及一些不在我直接控制之下的日志记录宏)。因此,我决定做这样的事情,希望它能正常工作(万一有人想知道,它不起作用的原因是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
最佳答案
一些编译器提供#pragma push_macro
和#pragma pop_macro
来保存和恢复宏状态。
便携性有限。
关于c++ - 临时宏,用于存储另一个宏,然后还原,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6215507/