Bonjour,
Je decouvre boost::lambda et je voudrai ecrire une fonction toute bete qui compare 2 chaines case insensitive.
Pour cela, j'utilise boost lambda :
En gros je voudrais passer une lambda expression a la fonction tolower et ca compile pas, voici l'erreur :
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 #include <boost/lambda/lambda.hpp> #include <boost/lambda/casts.hpp> #include <string> #include <algorithm> #include <cctype> namespace bll = boost::lambda; bool strcmpNoCase(const string& s1, const string& s2) { return (s1.size() == s2.size()) && equal(s1.begin(), s1.end(), s2.begin(), tolower(bll::ll_static_cast<int>(bll::_1)) == tolower(bll::ll_static_cast<int>(bll::_2))); }
boostlambda.cpp: In function `bool strcmpNoCase(const std::string&, const std::string&)':
boostlambda.cpp:26: error: cannot convert `const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<1, boost::lambda::cast_action<boost::lambda::static_cast_action<int> > >, boost::tuples::tuple<boost::lambda::lambda_functor<boost::lambda::placeholder<1> >, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type> > >' to `int' for argument `1' to `int tolower(int)'
C'est plutot abscons pour moi, si quelqu'un pouvait m'aider et me dire comment passer un _1 a une fonction, peut etre avec un boost::bind ?
Merci !
Partager