Sam*_*sen 0 c++ lambda templates c++11
我想创建一个接受函数指针和lambda表达式的函数.函数的返回类型应与函数指针/ lambda表达式的返回类型相同.
以下是一个函数的最小示例,该函数按预期工作,但仅适用于函数指针.我也可以使用模板来接受lambda表达式吗?
template <typename R>
R foo(R (*func)())
{
return func();
}
Run Code Online (Sandbox Code Playgroud)
以下适用于函数指针和lambda表达式,但只接受bool
.
bool foo(std::function<bool()> func)
{
return func();
}
bool a = foo( [](){ return true; } );
Run Code Online (Sandbox Code Playgroud)
我尝试使用模板使它变得通用,但是当它被调用时我得到一个编译器错误(没有匹配的函数)
template <typename R>
R foo(std::function<R()> func)
{
return func();
}
bool a = foo( [](){ return true; } );
Run Code Online (Sandbox Code Playgroud)
您可以使用推导的退货类型:
template <typename F>
auto foo(F f) -> decltype(f())
{
return f();
}
Run Code Online (Sandbox Code Playgroud)
如果F
需要一些论点:
template <typename F, typename ... Args>
auto foo(F f, Args&&...args) -> decltype(f(std::forward<Args>(args)...))
{
return f(std::forward<Args>(args)...);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
160 次 |
最近记录: |