基本上,我想要做的是获取一个带有任意数量的任意类型参数的 lambda,并将其转换为 std::function。我尝试了以下方法,但两种方法都不起作用。
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()>([](){}));
}