【发布时间】:2019-12-15 19:47:11
【问题描述】:
我想在template 中从lambda 创建一个std::function,它将所需的std::function 实例作为其参数:
template <class functionT>
functionT make_lambda() {
return [](/* ignore all args */){ std::cout << "my lambda\n"; };
}
然后用不同的aliases 或std::function 调用template:
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 可以使用任何类型的参数调用,或者您是否需要您的 lambda 只能使用与
std::function的签名相对应的参数调用并且其他所有操作都失败编译? -
@MichaelKenzel 我希望它可以使用签名的参数调用(我不会在不传递 int 的情况下调用 function_args)
标签: c++ templates lambda std-function