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 :

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)));
}
En gros je voudrais passer une lambda expression a la fonction tolower et ca compile pas, voici l'erreur :

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 !