【发布时间】:2018-01-07 22:18:33
【问题描述】:
我需要在我的应用程序中使用正则表达式。我使用的是 Boost(Regex),但 gcc 4.9 已支持。类似的标准正则表达式库仅与 >= 4.9 的 gcc 版本兼容。 是否有任何与 gcc 4.8.5 兼容的 c++ Regex 库。 注意:我无法更新 gcc 版本
【问题讨论】:
我需要在我的应用程序中使用正则表达式。我使用的是 Boost(Regex),但 gcc 4.9 已支持。类似的标准正则表达式库仅与 >= 4.9 的 gcc 版本兼容。 是否有任何与 gcc 4.8.5 兼容的 c++ Regex 库。 注意:我无法更新 gcc 版本
【问题讨论】:
在使用std::shared_ptr 的多线程程序中,我在使用 gcc 4.9 和 gcc 6.3(从 Jessie 升级到 Debian Stretch 之后)遇到了同样的问题。问题是gcc 4.9不支持std::atomic_load,这是多线程的问题。
因此,解决方案很简单:由于 boost 和 std 共享(几乎)相同的接口,您可以创建一个 detects 编译器版本的头文件。如果是 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
在你需要正则表达式的地方,使用这个文件,编译器会自动为你做所有的选择。并使用您在那里创建的新定义来调用正则表达式函数和对象。
【讨论】: