码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-11-24 09:51:09      阅读:55      评论:0      收藏:0      [点我收藏+]

标签:draw   add   指针   作用域   ptr   amp   一个   oid   lambda   

[&](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(十四)

标签:draw   add   指针   作用域   ptr   amp   一个   oid   lambda   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!