基本上,我希望能够做的就是获取一个具有任意数量的任意类型参数的 lambda,并将其转换为一个 std: : 函数。 我尝试了以下方法,但两种方法都不管用。
std::function([](){});//Complains that std::function is missing template parameters
template <typename T> void foo(function<T> f){}
foo([](){});//Complains that it cannot find a matching candidate
然而,下面的代码确实可以工作,但是它不是我想要的,因为它需要显式地声明模板参数,而这些参数不适用于泛型代码。
std::function<void()>([](){});
我整个晚上都在研究函数和模板但我就是搞不明白,所以如果有任何帮助我会很感激的。
正如注释中提到的,我之所以尝试这样做是因为我试图在 C + + 中使用可变模板实现局部套用。不幸的是,这在使用 lambdas 时严重失败。例如,我可以使用函数指针传递一个标准函数。
template <typename R, typename...A>
void foo(R (*f)(A...)) {}
void bar() {}
int main() {
foo(bar);
}
但是我不知道怎么把 lambda 传给这样的可变参数函数。我之所以对将通用 lambda 转换为 std: : function 感兴趣,是因为我可以执行以下操作,但最终需要将模板参数显式地声明给 std: : function,这正是我试图避免的。
template <typename R, typename...A>
void foo(std::function<R(A...)>) {}
int main() {
foo(std::function<void()>([](){}));
}