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

Fou*_*met 3 c++ lambda templates std-function

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

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

然后调用template具有不同别名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
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

一些精度:

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

Mic*_*zel 5

简单地使用带有参数包的通用 lambda 来吞下并忽略可能给它的任何参数:

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