Tengo un método como esteEscribir una función que acepta una expresión lambda como argumento
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;
}
y la idea es que usted lo llamaría como esto
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;
}
);
}
Sin embargo me sale el error : ninguna instancia de la plantilla de función "VlcFunctional :: mapMapValues" coincide con los tipos de argumentos de la lista de argumentos son: (std :: map, std :: allocator >>, __lambda1)
¿Alguna idea de lo que estoy haciendo mal? Visual Studio 2008 y el compilador Intel C++ 11.1
'new' es una palabra clave que no puede haber una variable llamada' new' – Motti
jaja. Sí, bien visto, porque el código no encontró los argumentos correctos de la plantilla, esto en realidad nunca se compiló, así que el compilador nunca se molestó en señalarme :) –
No estoy seguro de que se necesite "-> int" para la función lambda – serup