对于lambda函数指针转换,C ++模板类型推导失败

时间:2016-11-07 14:23:36

标签: c++

在下面的代码中,我遇到了将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;更好的方式。

0 个答案:

没有答案