首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何确定C++中的lambda参数?

如何确定C++中的lambda参数?
EN

Stack Overflow用户
提问于 2021-09-19 08:45:37
回答 1查看 52关注 0票数 0

我希望将所有函数(以元组作为参数)传递给Foo,将其转换为采用简单参数的函数。

代码语言:javascript
运行
复制
auto f = [](const std::tuple<int, char>& t) { return std::get<0>(t); };

template <typename F>
auto Foo(F&& f) {
    ...
}

Foo(f)(42, 'a')

我的想法是做这样的事

代码语言:javascript
运行
复制
template <typename ReturnType, typename... Args>
auto Foo(std::function<ReturnType(const std::tuple<Args...>&)> f) {
    return [&](Args&&... args) -> ReturnType {
      return f({std::forward<Args>(args)...});  
    };
}

但是编译器不能为lambda推断模板参数,因此忽略了这个候选参数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-19 09:23:11

如果你真的不需要参数类型。简单地说

代码语言:javascript
运行
复制
template <typename Callable>
auto Foo(Callable f) {
    return [=](auto&&... args)->decltype(auto){
      return f({std::forward<decltype(args)>(args)...});
    };
}

好的一面是Foo现在可以接受更通用的f,它可以定义多个opreator()

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69241697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档