c++ - 在不知道函数参数的情况下使用 lambda 创建 std::function

标签 c++ templates lambda std-function

我想创建一个std::function来自lambda ,在 template它将所需的 std::function 实例作为其参数:

template <class functionT>
functionT make_lambda() {
    return [](/* ignore all args */){ std::cout << "my lambda\n"; };
}

然后使用不同的 aliases 调用该模板 std::function :

using function_no_args = std::function<void(void)>;
using function_args = std::function<void(int)>;

make_lambda<function_no_args>()(); // output: "my lambda"
make_lambda<function_args>()(999); // compile error

我怎样才能实现这个目标?

一些精度:

  • 我需要能够为 std::function 提供别名,在 traits 结构中定义它们,并将它们传递到我的代码的多个部分
  • 返回类型始终为void,只有参数可能会改变

最佳答案

只需使用带有参数包的通用 lambda 来吞咽并忽略可能提供给它的任何参数:

template <class functionT>
functionT make_lambda() {
    return [](auto&&...){ std::cout << "my lambda\n"; };
}

关于c++ - 在不知道函数参数的情况下使用 lambda 创建 std::function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59347494/

相关文章:

c++ - 模板类作为STL容器参数

c++ - 无法使用包含在类模板中的位字段成员聚合初始化结构类型的变量

java使用函数作为参数,只关心函数的返回值

c# - 使用 LINQ 从过滤的自定义 List<T> 转换

c++ - 如何正确结束线程?

c++ - 使用另一个 C 文件中的 switch case 调用方法?

c# - 文本框 Silverlight 的样式

c++ - 如何为这种情况编写赋值运算符?

c++ - 使用特殊化可变参数模板

c++ - 在没有 std::function 的情况下将 lambdas/函数存储在 std::vector 中