如何根据Boost版本有选择地包括Boost标头

Ant*_*ton 1 c++ boost c-preprocessor

Boost中的此更改导致某些头文件位置发生更改:https : //github.com/boostorg/property_tree/commit/ea940990691de91e9b22255d9b450fcdac237646

我正在使用一个代码库,其中一些用户使用旧版本的boost和旧的标头位置(例如,#include <boost/property_tree/detail/json_parser_error.hpp>而不是较新的)进行构建#include <boost/property_tree/json_parser/error.hpp>。我想保持与旧版本(1.61之前)和较新版本的兼容性。

如果版本> = 1.61,是否有一种方法指示编译器检查boost版本并使用新的头文件include?

mir*_*ham 5

我认为您正在寻找BOOST_VERSION预处理器。它在boost\version.hpp

//注意,这是唯一保证
每次Boost版本都会更改的boost头文件,//每次发布
新的boost版本时,此头文件都会导致重新编译

//
// BOOST_VERSION%100是补丁程序级别
// BOOST_VERSION / 100%1000是次要版本
// BOOST_VERSION / 100000是主要版本

简单的用法是:

#if BOOST_VERSION >= 106100
#include <this.hpp>
#else
#include <that.hpp> 
#endif
Run Code Online (Sandbox Code Playgroud)