C++11 将lambda显式转换为函数指针

C++11 将lambda显式转换为函数指针,c++11,lambda,C++11,Lambda,我尝试调用一个遗留模板函数,它对具有不同参数数的函数指针进行了大量专门化。我正在编写一个我自己的新模板函数,它接受一些任意类型的非捕获lambda,并需要将其传递给另一个库。如果直接执行此操作,则模板解析失败。然而,如果我显式地将它转换为相关的函数指针类型,事情就会正常 然后,问题是如何使我的模板代码从lambda的类型中获取该函数指针类型,或者在不显式引用该类型的情况下强制进行显式转换。只需使用一元加号将lambda转换为函数指针,如下所示: auto* f = +[]{ std::cout

我尝试调用一个遗留模板函数,它对具有不同参数数的函数指针进行了大量专门化。我正在编写一个我自己的新模板函数,它接受一些任意类型的非捕获lambda,并需要将其传递给另一个库。如果直接执行此操作,则模板解析失败。然而,如果我显式地将它转换为相关的函数指针类型,事情就会正常


然后,问题是如何使我的模板代码从lambda的类型中获取该函数指针类型,或者在不显式引用该类型的情况下强制进行显式转换。

只需使用一元加号将lambda转换为函数指针,如下所示:

 auto* f = +[]{ std::cout << "Hello, world!\n"; }; // f is of type void (*)()

只需使用一元加号将lambda转换为函数指针,如下所示:

 auto* f = +[]{ std::cout << "Hello, world!\n"; }; // f is of type void (*)()

auto*f=+[]{std::cout一个稍微更直观的语法(但其工作原理不易理解)选项是
*[]{…}
一个稍微直观的语法(但其工作原理不易理解)选项是
*[]{…}