#include <cstdio>#include <string>template<class Func>class foo{public: foo(Func func) : fum(func){} Func fum;};int main(){ foo<???> fi([](int i) -> bool { printf("%d",i); return true; }); fi.fum(2); return 0;}
我想另一种可以做到的方式是这样的:
template<typename Func>foo<Func> make_foo(Func f){ return foo<Func>(f);}int main(){ auto fi = make([](int i) -> bool { printf("%d",i); return true; }); fi.fum(2); return 0;}解决方法 这是自动decltype:
auto l = [](int i) -> bool { printf("%d",i); return true; };foo<decltype(l)> fi(l);fi.fum();
每个lambda都有一个不同的,唯一的,未命名的类型.作为一名程序员,你无法命名.
但是,在你的情况下,由于lambda不捕获任何东西(empty []),它可以隐式转换为指向函数的指针,所以这样做:
foo<bool(*)(int)> fi([](int i) -> bool { printf("%d",i); return true; });fi.fum();总结
以上是内存溢出为你收集整理的C 11 lambda和模板专业化全部内容,希望文章能够帮你解决C 11 lambda和模板专业化所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)