2017-08-01 96 views
1

我需要在我的應用程序中使用正則表達式。我正在使用Boost(正則表達式),但是已經被gcc 4.9支持。同樣,標準的正則表達式庫與onle gcc版本> = 4.9兼容。 是否有任何C++ Regex庫與gcc 4.8.5兼容。 注意:我無法更新gcc版本gcc的任何正則表達式庫4.8

回答

0

在使用std::shared_ptr的多線程程序中,我遇到了與gcc 4.9 vs gcc 6.3(從Jessie升級到Debian Stretch後)相同的問題。問題是gcc 4.9不支持std::atomic_load,這是多線程的問題。

因此,解決方案很簡單:由於boost和std共享(幾乎)相同的接口,因此您可以創建一個頭文件,編譯器版本爲detects。如果是4.9或更高版本,然後用正則表達式性病,否則,使用升壓正則表達式:

#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 

而且在您需要的正則表達式,使用這個文件,編譯器會自動執行所有選擇適合你。並使用您在那裏創建的新定義調用regex函數和對象。