2017-08-01 3 views
1

J'ai besoin d'utiliser Regex dans mon application. J'utilisais Boost (Regex) mais cela a été supporté par gcc 4.9. De même, la bibliothèque Regex standard est compatible avec la version gcc d'onle> = 4.9. Existe-t-il une bibliothèque Regex C++ compatible avec gcc 4.8.5. Note: Je ne peux pas mettre à jour la version gccToute bibliothèque Regex pour gcc 4.8

Répondre

0

J'ai eu le même problème avec gcc 4.9 vs gcc 6.3 (après mise à niveau vers Debian extensible de Jessie) dans un programme multithread qui a utilisé std::shared_ptr. Le problème était que gcc 4.9 ne supportait pas std::atomic_load, ce qui était un problème pour le multithreading.

Donc, la solution est simple: Puisque boost et std partagent (presque) la même interface, vous pouvez créer un fichier d'en-tête detects la version du compilateur. Si elle est de 4,9 ou plus, utilisez regex std, sinon, utilisez boost regex:

#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 

Et où vous avez besoin regex, utilisez ce fichier, et le compilateur fera automatiquement toute la sélection pour vous. Et utilisez les nouvelles définitions que vous créez là-bas pour appeler les fonctions et les objets regex.