【发布时间】:2014-04-13 11:30:19
【问题描述】:
有没有办法让 lambda 衰减到指针,而无需显式转换为正确的签名?这会整理一些代码:
template<typename T> T call(T(*func)()){ return func(); }
int ptr(){ return 0; }
int main(){
auto ret1 = call(ptr);
auto ret2 = call((int(*)())([]{ return 0; }));
auto ret3 = call([]{ return 0; }); //won't compile
}
很明显,只有当 lambda 衰减为指针时,对 call 的调用才有效,但我猜这只有在选择了正确的函数重载/模板后才会发生。不幸的是,我只能想到涉及模板的解决方案,以使具有任何签名的 lambda 衰减,所以我回到了第一方。
【问题讨论】:
标签: c++ templates c++11 lambda function-pointers