J'ai une méthode comme celui-ciEcrire une fonction qui accepte une expression lambda comme argument
template<typename T, typename U>
map<T,U> mapMapValues(map<T,U> old, T (f)(T,U))
{
map<T,U> new;
for(auto it = old.begin(); it != old.end(); ++it)
{
new[it->first] = f(it->first,it->second);
}
return new;
}
et l'idée est que vous appelleriez comme ça
BOOST_AUTO_TEST_CASE(MapMapValues_basic)
{
map<int,int> test;
test[1] = 1;
map<int,int> transformedMap = VlcFunctional::mapMapValues(test,
[&](int key, int value) -> int
{
return key + 1;
}
);
}
Cependant, je reçois l'erreur : aucune instance du modèle de fonction "VlcFunctional :: mapMapValues" ne correspond aux types d'arguments de la liste d'arguments: (std :: map, std :: allocator >>, __lambda1)
Une idée de ce que je fais mal? Visual Studio 2008 et le compilateur Intel C 11.1
'new' est un mot clé que vous ne pouvez pas avoir une variable appelée' new' – Motti
haha. Oui bien vu, parce que le code ne trouvait pas les arguments de template corrects qui n'ont jamais été compilés, donc le compilateur n'a jamais pris la peine de me le signaler :) –
Je ne suis pas sûr que le "-> int" soit nécessaire pour la fonction lambda – serup