我想更多的控制宏,如断言(和一些不直接在我的控制下的日志宏)。所以我决定做这样的事情,期待它的工作(如果有人想知道,它不起作用的原因是最后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
“上面一行是重新定义宏”只有当它没有一个头文件保护。并没有定义任何模板功能。或类。或者其他任何会导致第二次包含问题的东西。另外,您需要结束并重新启动#include周围的任何名称空间块。 – IronMensan 2011-06-02 18:15:17
是的,我想你是对的!但是,正如我所说的那样,“这可能不适用于所有情况”......如果“push macro”不可用,这可能值得一看。 – 2011-06-03 10:53:03