Ecl*_*pse 9 c++ boost namespaces
我希望同时将两个版本的BOOST编译成一个项目.理想情况下,它们应该可用于以下方面:
boost_1_36_0::boost::shared_ptr<SomeClass> someClass = new SomeClass();
boost_1_35_0::boost::regex expression("[0-9]", boost_1_35_0::boost::regex_constants::basic);
Run Code Online (Sandbox Code Playgroud)
Ecl*_*pse 10
我通过开发列表讨论阅读(扫描得很好).没有简单的解决方案.总结一下:
在头文件声明中包装头文件
namespace boost_1_36_0 {
#include <boost_1_36_0/boost/regex.hpp>
}
namespace boost_1_35_0 {
#include <boost_1_35_0/boost/shared_ptr.hpp>
}
Run Code Online (Sandbox Code Playgroud)
在包含标题之前定义提升
#define boost boost_1_36_0
#include <boost_1_36_0/boost/regex.hpp>
#undef boost
#define boost boost_1_35_0
#include <boost_1_35_0/boost/shared_ptr.hpp>
#undef boost
Run Code Online (Sandbox Code Playgroud)
-Dboost=boost_1_36_0
一些内部头文件包含可能会混乱,因为这种事情确实发生了.
#if defined(SOME_CONDITION)
# define HEADER <boost/some/header.hpp>
#else
# define HEADER <boost/some/other/header.hpp>
#endif
Run Code Online (Sandbox Code Playgroud)
但是解决这些问题可能很容易.
namespace boost {..}
,namespace boost_1_36_0 {...}
然后提供命名空间别名.替换所有BOOST_XYZ
宏及其用途BOOST_1_36_0_XYZ
.