Ho un metodo come questoScrivere una funzione che accetta un'espressione lambda come argomento
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;
}
e l'idea è che si chiamerebbe in questo modo
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;
}
);
}
Tuttavia ho l'errore : nessuna istanza del modello di funzione "VlcFunctional :: mapMapValues" corrisponde ai tipi di argomenti dell'elenco di argomenti: (std :: map, std :: allocator >>, __lambda1)
Qualche idea di cosa sto facendo male? Visual Studio 2008 e Intel C++ Compiler 11.1
'new' è una parola chiave non si può avere una variabile chiamata' new' – Motti
haha. Sì, ho visto bene, perché il codice non stava trovando gli argomenti del template corretti, questo non è mai stato compilato in modo tale che il compilatore non si è mai preoccupato di indicarmelo :) –
Non sono sicuro che "-> int" sia necessario per la funzione lambda – serup