Boost C++ 库

...世界上最受推崇和专业设计的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ 编码标准

PrevUpHomeNext

第 17 章。Boost.Lambda

Jaakko Järvi

使用、修改和分发受 Boost 软件许可协议 1.0 版的约束。(请参阅随附文件 LICENSE_1_0.txt 或在 https://boost.ac.cn/LICENSE_1_0.txt 复制)

目录

概要
入门
安装库
本文档中使用的约定
简介
动机
lambda 表达式简介
使用库
入门示例
lambda 仿函数的参数和返回类型
关于 lambda 仿函数的实际参数
在 lambda 函数中存储绑定参数
lambda 表达式详解
占位符
运算符表达式
绑定表达式
重写推导的返回类型
延迟常量和变量
用于控制结构的 lambda 表达式
异常
构造和析构
特殊 lambda 表达式
类型转换、sizeof 和 typeid
嵌套 STL 算法调用
扩展返回类型推导系统
实际注意事项
性能
关于编译
可移植性
与其他 Boost 库的关系
Boost Function
Boost Bind
贡献者
某些设计决策的理由
Lambda 仿函数的元数
参考文献

概要

Boost Lambda 库(以下简称 BLL)是一个 C++ 模板库,它为 C++ 实现了一种 lambda 抽象形式。该术语起源于函数式编程和 lambda 演算,其中 lambda 抽象定义了一个未命名的函数。BLL 的主要动机是为 STL 算法提供灵活便捷的方式来定义未命名的函数对象。在解释该库的用途时,一行代码胜过千言万语;以下代码行输出由空格分隔的某些 STL 容器 a 的元素

for_each(a.begin(), a.end(), std::cout << _1 << ' ');

表达式 std::cout << _1 << ' ' 定义了一个一元函数对象。变量 _1 是此函数的参数,是实际参数的 占位符。在 for_each 的每次迭代中,都会使用 a 的元素作为实际参数来调用该函数。此实际参数将替换占位符,并评估该函数的主体

BLL 的本质是让您直接在 STL 算法的调用站点上定义小的未命名函数对象,例如上面的那个。

参考文献

[STL94] A. A. StepanovM. Lee. 标准模板库 惠普实验室。 1994 年。 www.hpl.hp.com/techreports

[SGI02] SGI 标准模板库 2002 年。 www.boost.org/sgi/stl/

[C++98] 国际标准,编程语言 – C++ ISO/IEC:14882。 1998 年。

[Jär99] 计算机科学讲义 1977。 Springer。 2000 年。

[Jär00] Jaakko Järvi. Gary Powell. Lambda 库:C++ 中的 Lambda 抽象 图尔库计算机科学中心。 技术报告。 378。 2000 年。 www.tucs.fi/publications

[Jär01] Jaakko Järvi. Gary Powell. Lambda 库:C++ 中的 Lambda 抽象 第二届 C++ 模板编程研讨会。 坦帕湾,OOPSLA'01。 . 2001 年。 www.oonumerics.org/tmpw01/

[Jär03] 软件 - 实践与经验 33:259-291。 2003 年。

[tuple] Boost Tuple 库 www.boost.org/libs/tuple/doc/tuple_users_guide.html 2002 年。

[type_traits] Boost type_traits www.boost.org/libs/type_traits/ 2002 年。

[ref] Boost ref www.boost.org/libs/bind/ref.html 2002 年。

[bind] Boost Bind 库 www.boost.org/libs/bind/bind.html 2002 年。

[function] Boost Function 库 www.boost.org/libs/function/ 2002 年。

[fc++] FC++ 库:C++ 中的函数式编程 Yannis Smaragdakis. Brian McNamara. yanniss.github.io/fc++/ 2002 年。


PrevUpHomeNext