C 11 lambda和模板专业化

C 11 lambda和模板专业化,第1张

概述我想知道下面给出的lambda的正确类型定义是什么,以便下面的代码将使用符合c 11的编译器进行编译: #include <cstdio>#include <string>template<class Func>class foo{public: foo(Func func) : fum(func){} Func fum;};int main(){ fo 我想知道下面给出的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();
总结

以上是内存溢出为你收集整理的C 11 lambda和模板专业化全部内容,希望文章能够帮你解决C 11 lambda和模板专业化所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1223538.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存