Copyright (c) 1999-2004 Jaakko Järvi, Gary Powell
The Boost Lambda Library is free software; Permission to copy, use, modify and distribute this software and its documentation is granted, provided this copyright notice appears in all copies.
Table of Contents
- 1. In a nutshell
- 2. Getting Started
- 3. Introduction
- 3. 1. Motivation
- 3. 2. Introduction to lambda expressions
- 4. Using the library
- 5. Lambda expressions in details
- 5.1. Placeholders
- 5.2. Operator expressions
- 5.3. Bind expressions
- 5.4. Overriding the deduced return type
- 5.5. Delaying constants and variables
- 5.6. Lambda expressions for control structures
- 5.7. Exceptions
- 5.8. Construction and destruction
- 5.9. Special lambda expressions
- 5.10. Casts, sizeof and typeid
- 5.11. Nesting STL algorithm invocations
- 6. Extending return type deduction system
- 7. Practical considerations
- 7.1. Performance
- 7.2. About compiling
- 7.3. Portability
- 8. Relation to other Boost libraries
- 8.1. Boost Function
- 8.2. Boost Bind
- 9. Contributors
- A. Rationale for some of the design decisions
- Bibliography
1. In a nutshell
Boost Lambda Library(以降BLL)はC++においての λ抽象 の型を実装したC++のテンプレートライブラリである。 この言葉はλ抽象によって無名の関数を定義する関数型言語やλ計算に由来する。 BLLの主な動機はSTLのアルゴリズムのための無名の関数オブジェクトを定義する柔軟で簡便な方法を提供することである。 このライブラリについて説明するにあたって、簡単なコードを見るほうが理解しやすい。 次の一行はあるSTLコンテナ a
の要素を空白で区切って出力する。
for_each(a.begin(), a.end(), std::cout << _1 << ' ');
std::cout << _1 << ' '
は単項関数オブジェクトを定義している。 変数 _1
はこの関数の仮引数であり、実引数のためのプレースホルダーである。 for_each
の繰り返しのたびに、この関数は a
の一つの要素を実引数として呼出される。 この実引数はプレースホルダーとして抽象化され、この関数の"本体"が評価される。
BLLの本質は上にあげたような小さな無名の関数オブジェクトを、STLアルゴリズムを呼出す位置で直接定義することを可能にすることである。