我通过开发列表讨论阅读(扫描得很好).没有简单的解决方案.总结一下:
在头文件声明中包装头文件
namespace boost_1_36_0 { #include} namespace boost_1_35_0 { #include }
需要修改源文件
由于宏不遵循名称空间,因此不允许将两个版本包含在同一个转换单元中.
在包含标题之前定义提升
#define boost boost_1_36_0 #include#undef boost #define boost boost_1_35_0 #include #undef boost
源文件可以简单地编译 -Dboost=boost_1_36_0
仍然没有解决单个翻译单元中的宏冲突.
一些内部头文件包含可能会混乱,因为这种事情确实发生了.
#if defined(SOME_CONDITION) # define HEADER#else # define HEADER #endif
但是解决这些问题可能很容易.
修改整个boost库以替换namespace boost {..}
,namespace boost_1_36_0 {...}
然后提供命名空间别名.替换所有BOOST_XYZ
宏及其用途BOOST_1_36_0_XYZ
.
如果你愿意付出努力,这可能会奏效.