如何将BOOST包装在单独的命名空间中?
时间:2020-03-06 14:37:01 来源:igfitidea点击:
我希望将两个版本的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);
解决方案
我们将在连接时遇到麻烦,因为名称混乱将有所不同。是的,我知道我们知道这一点,但是似乎到处都是麻烦。
@Josh:
尽管我同意这一颤抖,但我仍然相信这是更好的做法。否则,可以确定是否存在链接问题。我遇到过这样的情况,在此之前,我不得不使用objcopy来破解已编译的库,以避免定义冲突。由于平台互操作性的原因,这是一场噩梦,因为即使在相同版本的编译器(在我的情况下为GCC)的不同版本中,名称修改的工作方式也非常不同。
我在开发列表讨论中已阅读(仔细阅读)。没有简单的解决方案。总结一下:
- 由于宏不尊重名称空间,因此不允许两个版本都包含在同一个翻译单元中。
- 仍然无法解决单个翻译单元中的宏冲突。
- 一些内部头文件包含可能会被弄乱,因为这种事情确实发生了。
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> }
但是解决这些情况可能很容易。
代码数量不匹配
代码数量不匹配