【发布时间】:2014-05-13 10:27:14
【问题描述】:
我想创建一个同时接受函数指针和 lambda 表达式的函数。函数的返回类型应该和函数指针/lambda表达式的返回类型一致。
以下是一个按预期工作但仅适用于函数指针的函数的最小示例。我也可以使用模板来接受 lambda 表达式吗?
template <typename R>
R foo(R (*func)())
{
return func();
}
以下内容适用于函数指针和 lambda 表达式,但仅接受 bool。
bool foo(std::function<bool()> func)
{
return func();
}
bool a = foo( [](){ return true; } );
我尝试使用模板使其具有通用性,但在调用它时出现编译器错误(没有匹配的函数)
template <typename R>
R foo(std::function<R()> func)
{
return func();
}
bool a = foo( [](){ return true; } );
【问题讨论】:
-
没有捕获的 Lambda 可以转换为函数指针
-
@sp2danny:是的,但前提是您有该转换的上下文。这里的第一个问题是你不知道它将转换成的函数指针类型。
标签: c++ templates c++11 lambda