如何使用模板将lambda转换为std :: function
基本上,我希望能够做的是使用任意数量的任何类型的参数lambda并将其转换为std :: function。我尝试过以下方法,两种方法都不起作用。
std::function([](){});//Complains that std::function is missing template parameterstemplate <typename T> void foo(function<T> f){}foo([](){});//Complains that it cannot find a matching candidate
但是下面的代码确实有效,但它不是我想要的,因为它需要明确说明不适用于通用代码的模板参数。
std::function<void()>([](){});
我整个晚上一直在使用功能和模板,我只是想不出来,所以任何帮助都会非常感激。
正如评论中所提到的,我试图这样做的原因是因为我试图使用可变参数模板在C ++中实现currying。不幸的是,这在使用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()>([](){}));}
德玛西亚99
慕少森
相关分类