我需要在我的应用程序中使用正则表达式。我使用的是 Boost(Regex),但 gcc 4.9 已支持。类似的标准正则表达式库仅与 >= 4.9 的 gcc 版本兼容。是否有任何与 gcc 4.8.5 兼容的 c++ Regex 库。注意:我无法更新 gcc 版本
1 回答
0
在一个使用std::shared_ptr
. 问题是 gcc 4.9 不支持std::atomic_load
,这是多线程的问题。
因此,解决方案很简单:由于 boost 和 std 共享(几乎)相同的接口,您可以创建一个检测编译器版本的头文件。如果是 4.9 或更高,则使用 std 正则表达式,否则,使用 boost 正则表达式:
#ifdef __GNUC__
#if __GNUC__ > 4 || \
(__GNUC__ == 4 && (__GNUC_MINOR__ > 9 || \
(__GNUC_MINOR__ == 9 && \
__GNUC_PATCHLEVEL__ > 0))
#include <regex>
#define Regex std::regex
#else
#include <boost/regex.hpp>
#define Regex boost::regex
#endif
#endif
在你需要正则表达式的地方,使用这个文件,编译器会自动为你做所有的选择。并使用您在那里创建的新定义来调用正则表达式函数和对象。
于 2017-08-01T07:28:21.683 回答