是否可以独立于库的包含顺序使用 BOOST_MPL_LIMIT_LIST_SIZE boost 变量?

问题描述 投票:0回答:0

我正在开发一个头文件,我们称之为main_file.h,其中包括另外两个头文件,我们称之为file_1.h和file_2.h,具有以下特征:

  • file_1.h包含不同的boost库,其中#include 。头文件list.hpp,包含宏BOOST_MPL_LIMIT_LIST_SIZE的定义,定义如下:
#if !defined(BOOST_MPL_LIMIT_LIST_SIZE)
#   define BOOST_MPL_LIMIT_LIST_SIZE \
        implementation-defined integral constant \
/**/
#endif
  • 在file_2.h中,由于我需要更改宏BOOST_MPL_LIMIT_LIST_SIZE的值,包含以下两行:
#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,然后包含 file_1.h,则不会出现任何编译错误
  2. 如果我先包含 file_1.h,然后包含 file_2.h,则会收到有关宏 BOOST_MPL_LIMIT_LIST_SIZE 的“重新定义”错误。

在情况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_doc

看来,为了用新值正确地重新定义宏,指令的顺序很重要,如下所示:“在库的这个实现中,BOOST_MPL_LIMIT_LIST_SIZE的默认值是20。要覆盖默认限制,请定义BOOST_MPL_LIMIT_LIST_SIZE到所需的最大数量,四舍五入到最接近的十的倍数在包含任何库头之前。”

这可以解释为什么情况 1 运行没有任何问题。 问题是我无法拥有一个软件,其正确编译取决于头文件包含的顺序。 有针对这个的解决方法吗?谢谢

尝试 #undef 宏,但不起作用

c++ boost compiler-errors header macros
© www.soinside.com 2019 - 2024. All rights reserved.