请看看下面的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