Por favor, mira el siguiente C++ 0x lambda código relacionado:C++ 0x lambda, ¿cómo puedo pasar como parámetro?
typedef uint64_t (*WEIGHT_FUNC)(void* param);
typedef std::map<std::string, WEIGHT_FUNC> CallbackTable;
CallbackTable table;
table["rand_weight"] = [](void* param) -> uint64_t
{
return (rand() % 100 + 1);
};
me dio un error (en Visual Studio 2010) que el lambda No se pudo convertir al tipo de WEIGHT_FUNC
. También sé la respuesta: el uso de std::function object
:
typedef std::function<uint64_t (void*)> WEIGHT_FUNC;
Sin embargo, también quiero saber cómo puedo recibir el tipo de lambda sin el uso de std::function
. ¿Qué tipo debería ser?
'auto'? _______ – kennytm
auto solo será útil para determinar automáticamente el tipo, no es un tipo de variante, no puede ser un parámetro. – Klaim
¿Qué compilador estás usando? Parece que tu compilador no es estándar en cuanto a lambda, deberían poder convertir implícitamente a un puntero de función (en casos como este). – GManNickG