我正在开发一个头文件,我们称之为main_file.h,其中包括另外两个头文件,我们称之为file_1.h和file_2.h,具有以下特征:
#if !defined(BOOST_MPL_LIMIT_LIST_SIZE)
# define BOOST_MPL_LIMIT_LIST_SIZE \
implementation-defined integral constant \
/**/
#endif
#define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
#define BOOST_MPL_LIMIT_LIST_SIZE 50
所以基本上我试图将宏 BOOST_MPL_LIMIT_LIST_SIZE 的默认值(20)更改为 50。 现在,我有两种可能的情况:
在情况1中,我认为由于宏已经在file_2.h中定义,boost库不会因为上面提到的#if !define(BOOST_MPL_LIMIT_LIST_SIZE)而重新定义它; 对于第二种情况,我尝试在 file_2.h 中使用类似的方法:
#define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
**#undef** BOOST_MPL_LIMIT_LIST_SIZE
#define BOOST_MPL_LIMIT_LIST_SIZE 50
但这基本上是行不通的。更准确地说,undef 运行良好,但该值保持设置为 20(默认)。
阅读 boost 文档我发现了以下信息:
看来,为了用新值正确地重新定义宏,指令的顺序很重要,如下所示:“在库的这个实现中,BOOST_MPL_LIMIT_LIST_SIZE的默认值是20。要覆盖默认限制,请定义BOOST_MPL_LIMIT_LIST_SIZE到所需的最大数量,四舍五入到最接近的十的倍数在包含任何库头之前。”
这可以解释为什么情况 1 运行没有任何问题。 问题是我无法拥有一个软件,其正确编译取决于头文件包含的顺序。 有针对这个的解决方法吗?谢谢
尝试 #undef 宏,但不起作用