C 11 lambda和模板专业化
发布时间:2020-12-16 10:52:54 所属栏目:百科 来源:网络整理
导读:我想知道下面给出的lambda的正确类型定义是什么,以便下面的代码将使用符合c 11的编译器进行编译: #include cstdio#include stringtemplateclass Funcclass foo{public: foo(Func func) : fum(func){} Func fum;};int main(){ foo??? fi([](int i) - bool {
我想知道下面给出的lambda的正确类型定义是什么,以便下面的代码将使用符合c 11的编译器进行编译:
#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(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |