在下面的代码中,我遇到了将lambda转换为模板函数指针的问题:
1)非模板函数f
:Lambda转换正常。
2)模板函数g
:Lambda转换需要指定模板参数。
3)变量模板函数h
:即使指定模板参数也不起作用,我必须显式地将lambda转换为函数指针。
void f(void(*)(int)) {}
template<class T> void g(void(*)(T)) {}
template<class... Ts> void h(void(*)(Ts...)) {}
int main()
{
f([](int) {}); // OK: Lambda to function pointer conversion works fine
g([](int) {}); // Error: cannot deduce template argument for void(*)(T) from lambda
g<int>([](int) {}); // OK: Specifying the template argument works
h([](int) {}); // Error: cannot deduce template argument for void(*)(Ts...) from lambda
h<int>([](int) {}); // Error: cannot deduce template argument for void(*)(int, Ts...) from lambda
h(static_cast<void(*)(int)>([](int) {})); // OK: Explicit cast works
}
我正在使用MS VS 2015.我大量使用案例3,而演员工作时它会使代码混乱,我很好奇为什么需要它并想知道是否有&# 39;更好的方式。