Technical Report 1
出典: フリー百科事典『ウィキペディア(Wikipedia)』
Technical Report 1 (TR1)は、標準C++ライブラリの拡張についてのドラフト文書である。これには正規表現、スマートポインタ、ハッシュ表、擬似乱数生成器などが含まれており、まだ決定してはいないものの、次期標準に含まれる見込みである。TR1の目標は「拡張された標準C++ライブラリの使用方法について慣習を確立してほしい」とのことである[1]。
目次 |
[編集] 概要
TR1はまだ標準C++の一部になったわけではないので、C++の処理系はTR1を実装する必要はない。しかし既に一部ないし全部を実装しているものもある。ちなみに、TR1の殆どはBoostに含まれており、それが利用可能である。
TR1はC++のライブラリの拡張の全てではない。たとえばC++0xこと次期標準C++ではスレッドに関するライブラリが含まれる可能性がある。また、Technical Report 2も既に公開されている。[2]。次期標準C++で言語機能自体の拡張(conceptの追加など)があれば、STL全体に機能増強が行われる見通しである。
なお、TR1で追加されたライブラリは、現標準ライブラリと区別するため、名前空間std::tr1に入れられている。しかし、C++0xでは名前空間stdに入れられる予定である。
TR1にとってC++0xは必須ではないが、現行のC++上で全て実装可能というわけでもない。例えば、型のPOD性を検査する関数is_podの実装にあたって、現行のC++にはクラスがPODであることを判別する方法が無い。したがって、現在のC++処理系でのTR1実装は、コンパイラ独自の拡張機能を使用するか、あるいは擬似的な実現に留まる。この状況は、かつて一部コンパイラがテンプレートの部分特殊化に対応していなかった時代のSTLの擬似実装とよく似ている。
[編集] 内容
TR1には次のものが含まれている。
[編集] 一般ユーティリティ
[編集] 参照ラッパ
- Boost.Ref由来[3]。
<functional>ヘッダに追加。 -cref,ref,reference_wrapper- アルゴリズムや関数オブジェクトに対して、値渡しではなく参照渡しを行うことができる。
[編集] スマートポインタ
- Boost Smart Pointer libraryを基にしている [4]。
<memory>ヘッダに追加。 -shared_ptr,weak_ptr, etc- より安全にメモリ管理を行うためのユーティリティ。参照カウントに基づくスマートポインタである。
[編集] 関数オブジェクト
<functional>ヘッダに4つのモジュールが追加。
[編集] function - 多態的関数ラッパ
- Boost.Functionを基にしている[5]。
[編集] bind - 関数オブジェクトの束縛
[編集] result_of - 関数の戻り値の型
- Boostを基にしている。
- 関数呼出式から、戻り値の型を決める機構。
[編集] mem_fn
- Boost Mem Fn libraryを基にしている[7]。
- 現標準の
std::mem_fun及びstd::mem_fun_refから機能向上したものである。 - メンバ関数へのポインタを関数オブジェクトにする機構である。
[編集] メタプログラミングと型特性
- 新しく
<type_traits>ヘッダが追加。 -is_pod,has_virtual_destructor,remove_extent, etc - Boost Type Traits libraryを基にしている[8]。
- データ型に関しての問い合わせを容易にすることによってメタプログラミングの支援をする。
[編集] 数値計算
[編集] 擬似乱数生成
- 新しく
<random>ヘッダが追加。 -variate_generator,mersenne_twister,poisson_distribution, etc - Boost Random Number Libraryを基にしている[9]。
[編集] 数学関数
[編集] コンテナ
[編集] タプル
- 新しく
<tuple>ヘッダが追加。 -tuple - Boost Tuple libraryを基にしている[10]。
- およそ
std::pairの拡張である。 - さまざまなデータ型を混在できる容量固定のデータ構造である。
[編集] 容量固定配列
- 新しく
<array>ヘッダが追加。 -array - Boost Array libraryから採用された[11]。
- 標準の
std::vectorのような動的配列とは全く逆の存在である。
[編集] ハッシュテーブル
- 新しく
<unordered_set>,<unordered_map>ヘッダが追加。 - 既存のライブラリを基にしたものではなく、新たに作られたものである。
- 要素の参照は、大抵の場合定数時間で済むが、最悪の場合には線形時間かかる。
- 名前が
hash_set(SGI版STLに含まれるライブラリ)などでないが、標準のset,mapはイテレータを用いて順序付けされた(ソートされた)要素アクセスが可能であるのに対し、unordered_set,unordered_mapでは不可能であることを示している。実装ではなくインターフェース(利用法)に由来した名前をつける発想である。
[編集] 正規表現
- 新たに
<regex>ヘッダが追加。 -regex,regex_match,regex_search,regex_replace, etc - Boost Regex libraryを基にしている[12]。
- 正規表現によるパターンマッチを行うライブラリ。
[編集] C互換ライブラリ
C++はC言語と互換になるように設計されているものの、現在C++は厳密な上位互換ではない。TR1はその溝を埋めるため<complex>, <locale>, <cmath>その他のヘッダに拡張を行っている。これによってC99とある程度は近づいたものの、C99の全てがTR1に含まれているわけではない。
[編集] 脚注
[編集] 関連項目
- Boost - TR1の一部のライブラリの基となっている。
- Standard Template Library - 現標準C++ライブラリの一部である。
- Technical Report 2 - さらなる拡張についてのドラフト。TR1同様、Boostから一部のライブラリが取り込まれている。
- C++0x - TR1も取り込まれる予定である次期C++標準。
[編集] 参考文献
- Peter Becker: "The C++ Standard Library Extensions: A Tutorial and Reference", 2006, ISBN 0321412990. TR1にも言及している。
[編集] 外部リンク
- http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf - このドラフト文書のPDF
- http://aristeia.com/EC3E/TR1_info_frames.html - スコット・メイヤーズ TR1 page, links to documents and articles

