Hello tout le monde,

Comment definir une expression reguliere qui pourra etre appliquee a tous types de string ? L'exemple suivant affiche "Matched" si la chaine passee est "abc" :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 
#include <string>
#include <iostream>
using namespace std;
 
#include <boost/regex.hpp>
using namespace boost;
 
 
template <typename StrT>
struct my_parser
{
        bool match( const StrT& ) const;
};
 
 
template <typename StrT>
bool my_parser<StrT>::match( const StrT& a_str ) const
{
        match_results<typename StrT::const_iterator> m;
        basic_regex<typename StrT::value_type> r( "abc" );
        regex_match( a_str, m, r );
}
 
 
int main()
{
        my_parser<string> p;
        string s = "abc";
 
        //my_parser<wstring> p;
        //wstring s = L"abc";
 
        if ( p.match( s ) )
        {
                cout << "Matched" << endl;
        }
        return 0;
};
Cet exemple fonctionne dans le cas ou le basic_regex est instancie avec une std::string. Cependant, il y a erreur a la compilation lorsqu'on veut utiliser une std::wstring : dans ce cas, la ligne qui definit le basic_regex devrait etre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
basic_regex<typename StrT::value_type> r( L"abc" );
Notez bien le L devant la chaine "abc" : c'est une wstring.

J'aimerai rendre ce code generique compatible avec d'autres chaines, comme les QString de Qt par exemple : quelle methode vous semble la plus appropriee ?

Merci beaucoup !