Si prega di guardare il seguente C++ 0x lambda relativo codice:C++ 0x lambda, come posso passare come parametro?
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);
};
ho ottenuto un errore (in Visual Studio 2010) che la lambda non poteva essere convertito nel tipo di WEIGHT_FUNC
. So anche la risposta: utilizzando std::function object
:
typedef std::function<uint64_t (void*)> WEIGHT_FUNC;
Tuttavia, vorrei anche sapere come posso ricevere il tipo di lambda SENZA usando std::function
. Che tipo dovrebbe essere?
'auto'? _______ – kennytm
auto sarà utile per determinare automaticamente il tipo, non è un tipo di variante, non può essere un parametro. – Klaim
Quale compilatore stai usando? Sembra che il tuo compilatore non sia standard per quanto riguarda i lambda, dovrebbero essere in grado di convertire implicitamente in un puntatore a funzione (in casi come questo.) – GManNickG