gpt4 book ai didi

c++ - 返回与作为参数传递的 lambda 表达式相同的类型

转载 作者:太空宇宙 更新时间:2023-11-04 14:48:54 25 4
gpt4 key购买 nike

我想创建一个接受函数指针和 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; } );

最佳答案

您可以使用推导的返回类型:

template <typename F>
auto foo(F f) -> decltype(f())
{
return f();
}

如果 F 接受一些参数:

template <typename F, typename ... Args>
auto foo(F f, Args&&...args) -> decltype(f(std::forward<Args>(args)...))
{
return f(std::forward<Args>(args)...);
}

关于c++ - 返回与作为参数传递的 lambda 表达式相同的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22806358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com