Ответ 1
Я прочитал (хорошо сканировался) через обсуждение . Там нет простого решения. Подводя итог:
-
Обтекание заголовочных файлов в объявлении пространства имен
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> }
- Требуется изменить исходные файлы
- Не допускается включение обеих версий в одну и ту же блок переводов из-за того, что макросы не уважают пространства имен.
-
Определение повышения перед включением заголовков
#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 для замены
namespace boost {..}
наnamespace boost_1_36_0 {...}
, а затем предоставление псевдонима пространства имен. Замените все макросыBOOST_XYZ
и их использование макросамиBOOST_1_36_0_XYZ
.- Возможно, это сработает, если вы захотите приложить усилия.