使用 lambda 作为 C 函数的参数

新手上路,请多包涵

我想使用 lambda 作为 C++ 函数的参数,但我不知道在函数声明中指定哪种类型。我想做的是:

 void myFunction(WhatToPutHere lambda){
    //some things
}

我试过 void myFunction(auto lambda)void myFunction(void lambda) 但这些代码都没有编译。万一这很重要,lambda 不会返回任何东西。

如何在 C++ 函数中使用 lambda 作为参数?

原文由 Donald Duck 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 707
2 个回答

你有两种方法:制作你的功能模板:

 template <typename F>
void myFunction(F&& lambda)
{
    //some things
}

或擦除类型(例如 std::function ):

 void
myFunction(const std::function<void()/*type of your lamdba::operator()*/>& f)
{
    //some things
}

原文由 Jarod42 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果这是一个 inline 函数,首选模板,如

template<typename Func>
void myFunction(Func const&lambda)
{
    //some things
}

因为它绑定到任何有意义的东西(并且会导致其他任何东西的编译器错误),包括 lambdas、命名类的实例和 std::function<> 对象。

另一方面,如果这个函数不是 inline ,即在某些编译单元中实现,则不能使用泛型模板,必须使用指定类型,最好采用 std::function<> 对象并通过引用传递。

原文由 Walter 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题