2017-08-01 14 views
1

私のアプリケーションでRegexを使う必要があります。私はBoost(Regex)を使っていましたが、これはgcc 4.9でサポートされています。同様に標準Regexライブラリはonle gcc version> = 4.9と互換性があります。 gcc 4.8.5と互換性のあるC++ Regexライブラリはありますか? 注:gccのバージョンを更新できませんgcc用Regexライブラリ4.8

答えて

0

std::shared_ptrを使用するマルチスレッドプログラムで、gcc 4.9とgcc 6.3(JessieのDebian Stretchにアップグレードした後)と同じ問題がありました。問題は、gcc 4.9がマルチスレッドの問題であったstd::atomic_loadをサポートしていないことでした。

したがって、解決策は簡単です:boostとstdは(ほぼ)同じインターフェイスを共有しているので、detectsコンパイラのバージョンのヘッダファイルを作成することができます。それが4.9以上だ場合は、STDの正規表現を使用し、それ以外の場合は、使用ブースト正規表現:

#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 

そして、あなたは正規表現を必要とし、このファイルを使用すると、コンパイラが自動的にすべての選択を行います。正規表現の関数とオブジェクトを呼び出すために作成した新しい定義を使用してください。

関連する問題