【发布时间】:2010-07-23 18:36:22
【问题描述】:
请看以下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 中),无法将 lambda 转换为 WEIGHT_FUNC 的类型。我也知道答案:使用std::function object:
typedef std::function<uint64_t (void*)> WEIGHT_FUNC;
但是,我也想知道如何在不使用 std::function 的情况下接收 lambda 类型。应该是什么类型的?
【问题讨论】:
-
auto 只会用于自动确定类型,它不是变体类型,它不能是参数。
-
您使用的是哪个编译器?似乎您的编译器在 lambda 方面是非标准的,它们应该能够隐式转换为函数指针(在这种情况下。)
-
g++ 4.5 没问题,所以我猜是 VC10,我已经看到了一些 lambda 错误。
-
@James: 啊,你当然有一个漏洞——我应该知道 :)