c – 如何在独立的命名空间中包装BOOST?
发布时间:2020-12-16 03:32:27 所属栏目:百科 来源:网络整理
导读:我正在将BOOST的两个版本同时编译成一个项目.理想情况下,它们应该沿着这些方向可用: boost_1_36_0::boost::shared_ptrSomeClass someClass = new SomeClass();boost_1_35_0::boost::regex expression("[0-9]",boost_1_35_0::boost::regex_constants::basic)
我正在将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); 解决方法
我读过(很好的扫描)通过
development list discussion.没有简单的解决方案.总结一下:
>在命名空间声明中封装头文件 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> } >需要修改源文件 >在包括标题之前定义boost #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 >源文件可以使用-Dboost = boost_1_36_0进行编译 #if defined(SOME_CONDITION) # define HEADER <boost/some/header.hpp> #else # define HEADER <boost/some/other/header.hpp> #endif 但是,解决这些情况可能很容易. >修改整个升级库以使用命名空间boost_1_36_0 {…}替换命名空间boost {..},然后提供命名空间别名.用BOOST_1_36_0_XYZ宏替换所有BOOST_XYZ宏及其用途. >如果你愿意付出努力,这可能会有效. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |