Совместимость проекта C ++ с несколькими версиями boost

Я работаю над проектом C ++ и внес несколько изменений, чтобы сделать его совместимым с boost 1.46 (версия по умолчанию, которую synaptic устанавливает на Oneiric), но я также хотел бы, чтобы он правильно компилировался со старой версией boost. Как я могу использовать другой код в зависимости от используемой версии. # Определяет ли файл конфигурации (сгенерированный autoconf) какую-то переменную, чтобы указать, какая именно? Кроме того, я не совсем уверен, в какой версии было внесено это конкретное изменение.

Вот разница для двух версий, которые я хочу интегрировать, на основе версии boost:

diff --git a/src/util/Misc.cpp b/src/util/Misc.cpp
index 467144d..a9738aa 100644
--- a/src/util/Misc.cpp
+++ b/src/util/Misc.cpp
@@ -28,7 +28,7 @@ void MiscUtil::FindProgramDir(int argc, char* argv[])
 {
     if (argc == 0 || argv == 0)
         return;
-    programDir = path(argv[0], native).branch_path();
+    programDir = path(argv[0]).branch_path();
 }

 void MiscUtil::WordToBytes(unsigned word, byte* out)
@@ -70,7 +70,7 @@ std::string MiscUtil::OpenFile(std::string name, std::ifstream& f)
     {
         path p = programDir / name;
         p.normalize();
-        programDirFile = p.native_file_string();
+        programDirFile = p.string();
         f.open(programDirFile.c_str());
         if (f.is_open())
             return programDirFile;
@@ -78,7 +78,7 @@ std::string MiscUtil::OpenFile(std::string name, std::ifstream& f)
     {
         path p = boost::filesystem::path(ABS_TOP_SRCDIR) / "share" / name;
         p.normalize();
-        absFile = p.native_file_string();
+        absFile = p.string();
         f.open(absFile.c_str());
         if (f.is_open())
             return absFile;
@@ -86,7 +86,7 @@ std::string MiscUtil::OpenFile(std::string name, std::ifstream& f)
     {
         path p = boost::filesystem::path(DATADIR) / name;
         p.normalize();
-        dataFile = p.native_file_string();
+        dataFile = p.string();
         f.open(dataFile.c_str());
         if (f.is_open())
             return dataFile;

Я не очень хорошо знаком с autoconf, и это не мой код, это чужой. Приветствуются любые объяснения того, что здесь происходит.

Спасибо


person dspyz    schedule 07.06.2012    source источник


Ответы (2)


Условная компиляция с номером версии Boost:

#include <boost/version.hpp>

#if BOOST_VERSION / 100 % 1000 == 46
// 1.46 version
    programDir = path(argv[0], native).branch_path();
#else
// older version
    programDir = path(argv[0]).branch_path();
#endif
person chrisaycock    schedule 07.06.2012
comment
Похоже, это изменение соответствует Boost V3. Какая версия Boost V3? Это 1,46 или раньше? - person dspyz; 07.06.2012
comment
О, я вижу: boost.org / doc / libs / 1_49_0 / libs / filesystem / v3 / doc / - person dspyz; 07.06.2012

У Boost есть 'version.hpp', который содержит определения, которые вы можете использовать, чтобы различать различные версии boost. Это объясняется в самом заголовке.

person Michael Kohne    schedule 07.06.2012