首页 > 编程语言 > 详细

lambda表达式——C++11(十四)

时间:2019-11-24 10:04:55      阅读:90      评论:0      收藏:0      [点我收藏+]
[&](int a){return a < x;}  
//其中x为lambda表达式所在局部作用域的变量,且以引用的方式被捕获。
// [&]是一个捕获列表,其指出lambda中使用的所有局部名字(如x)将通过引用访问。
// 若只希望捕获x,则可写成[&x]
// 若希望给生成的函数对象传递一个x的拷贝,则写成[=x]
// 捕获所有以值访问的局部名字用[=]
// 什么也不捕获是[]

// 具体应用实例
template<typename C, typename Oper>
void for_all(C& c, Oper op)
{
    for (auto& x: c)
        op(x);
}
vector<unique_ptr<Shape>> v;
for_all(v, [](unique_ptr<Shape>& ps){ps->draw();}); //对指针容器的元素指向的每个对象执行特定操作
for_all(v, [](unique_ptr<Shape>& ps){ps->rotate(45);});

// lambda的泛型表示
template<class S>
void rotate_add_draw(vector<S>& v, int r)
{
    for_all(v, [](auto& s){s->rotate(r); s->draw();});
}

vector<Shape*> v2;
rotate_add_draw(v2, 90);

 

lambda表达式——C++11(十四)

原文:https://www.cnblogs.com/share-ideas/p/11921245.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!