C++ Technical Report 1
ウィキペディアから
C++ Technical Report 1 (TR1、Technical Report on C++ Library Extensions)は、ISO/IEC TR 19768:2007[1] の非公式名称で、標準C++ライブラリの拡張についての標準規格である。これには正規表現、スマートポインタ、ハッシュ表、擬似乱数生成器などが含まれている。TR1の目標は「拡張された標準C++ライブラリの使用方法について慣習を確立してほしい」とのことである[2]。
概要
TR1は既に一部ないし全部を実装しているものもある。ちなみに、TR1のほとんどはBoostに含まれており、それが利用可能である。
TR1はC++のライブラリの拡張の全てではない。たとえばC++11ではスレッドに関するライブラリが含まれ、言語機能自体の拡張(move semanticsやvariadic templatesの追加など)などSTL全体に機能増強が行われた。
なお、TR1で追加されたライブラリは、現標準ライブラリと区別するため、名前空間 std::tr1
に入れられている。しかし、C++11では名前空間 std
に入れられた。
TR1にとってC++11は必須ではないが、現行のC++上で全て実装可能というわけでもない。例えば、型のPOD性を検査する関数is_pod
の実装にあたって、現行のC++にはクラスがPODであることを判別する方法が無い。したがって、現在のC++処理系でのTR1実装は、コンパイラ独自の拡張機能を使用するか、あるいは擬似的な実現に留まる。この状況は、かつて一部コンパイラがテンプレートの部分特殊化に対応していなかった時代のSTLの擬似実装とよく似ている。
注意点としては、TR1はC++の仕様の一部ではないので、std::tr1
名前空間やTR1の機能に依存したコードは後々問題を起こす可能性がある。というのも、最近のドラフトであるn3225では<type_traits>
で定義される has_*
はis_*
へ変更されている。また、std::tr1
は次期標準の仕様にも含まれないので注意されたい。
実装
次のような実装が存在する。
- Visual C++ 2008のFeature Pack[3]そしてその後に出たサービスパック1[4]
- libstdc++[5]
- Boost[6]
内容
要約
視点
TR1には次のものが含まれている。
一般ユーティリティ
参照ラッパ
スマートポインタ
- Boost Smart Pointer libraryを基にしている 。
<memory>
ヘッダに追加。 -shared_ptr
,weak_ptr
, etc- より安全にメモリ管理を行うためのユーティリティ。参照カウントに基づくスマートポインタである。
関数オブジェクト
<functional>
ヘッダに4つのモジュールが追加。
function - 多態的関数ラッパ
bind - 関数オブジェクトの束縛
- Boost Bind libraryから採用された。
- 現標準の
std::bind1st
及びstd::bind2nd
をより一般化したもので、関数オブジェクトへ引数の束縛を行う。
result_of - 関数の戻り値の型
- Boostを基にしている。
- 関数呼出式から、戻り値の型を決める機構。
mem_fn
- Boost Mem Fn libraryを基にしている。
- 現標準の
std::mem_fun
及びstd::mem_fun_ref
から機能向上したものである。 - メンバ関数へのポインタを関数オブジェクトにする機構である。
メタプログラミングと型特性
- 新しく
<type_traits>
ヘッダが追加。 -is_pod
,has_virtual_destructor
(C++11ではis_virtual_destructible
に変更),remove_extent
, etc - Boost Type Traits libraryを基にしている。
- データ型に関しての問い合わせを容易にすることによってメタプログラミングの支援をする。
数値計算
擬似乱数生成
- 新しく
<random>
ヘッダが追加。 -variate_generator
,mersenne_twister
,poisson_distribution
, etc - Boost Random Number Libraryを基にしている。
数学関数
コンテナ
タプル
容量固定配列
ハッシュテーブル
正規表現
C互換ライブラリ
C++はC言語と互換になるように設計されているものの、現在C++は厳密な上位互換ではない。TR1はその溝を埋めるため<complex>, <locale>, <cmath>その他のヘッダに拡張を行っている。これによってC99とある程度は近づいたものの、C99の全てがTR1に含まれているわけではない。
C++ Technical Report 2
C++ Technical Report 2 も作られたが[7]、正式に出版されることはなかった。
脚注
関連項目
参考文献
外部リンク
Wikiwand - on
Seamless Wikipedia browsing. On steroids.