C++ project Compatibility with multiple versions of boost
-
13-06-2021 - |
Pergunta
I'm working on a C++ project and I made a couple changes to make it compatible with boost 1.46 (the default version that synaptic installs on Oneiric), but I'd like to also make it compile correctly with the old version of boost. How can I have different code based on the version boost being used. Does the configure file (generated by autoconf) #DEFINE some variable to indicate which one? Also, I'm not entirely sure which version where this particular change was introduced.
Here's the diff for the two versions I want to integrate, based on boost version:
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;
I'm not very familiar with autoconf and this isn't my code, it's someone else's. Any explanation of what's going on here would be appreciated.
Thanks
Solução
Conditional compilation with the Boost version number:
#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
Outras dicas
Boost has 'version.hpp', which contains defines you could use to differentiate between the various versions of boost. It's explained in the header itself.