請看看下面的C++ 0x的λ相關代碼:C++ 0x lambda,我怎樣才能作爲參數傳遞?
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);
};
我得到一個錯誤(在Visual Studio 2010),該拉姆達不能轉換爲WEIGHT_FUNC
類型。我也知道了答案:用std::function object
:
typedef std::function<uint64_t (void*)> WEIGHT_FUNC;
不過,我也想知道我怎麼能接受的λ的類型,除非使用std::function
。它應該是什麼類型?
'auto'? auto_ – kennytm 2010-07-23 18:39:38
auto只是用於自動確定類型,它不是變體類型,它不能是參數。 – Klaim 2010-07-23 18:41:36
您正在使用哪種編譯器?似乎你的編譯器對於lambda來說是非標準的,它們應該能夠隱式地轉換成函數指針(在這種情況下) – GManNickG 2010-07-23 19:03:50