出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2014/11/04 13:16 UTC 版)
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[2]では<type_traits>で定義される has_* はis_* へ変更されている。また、std::tr1 は次期標準の仕様にも含まれないので注意されたい。
次のような実装が存在する。
TR1には次のものが含まれている。
<functional>ヘッダに追加。 - cref, ref, reference_wrapper<memory>ヘッダに追加。 - shared_ptr, weak_ptr, etc<functional>ヘッダに4つのモジュールが追加。
std::mem_fun及びstd::mem_fun_refから機能向上したものである。<type_traits>ヘッダが追加。 - is_pod, has_virtual_destructor(C++11ではis_virtual_destructibleに変更), remove_extent, etc<random>ヘッダが追加。 - variate_generator, mersenne_twister, poisson_distribution, etc<tuple>ヘッダが追加。 - tuplestd::pairの拡張である。<array>ヘッダが追加。 - arraystd::vectorのような動的配列とは全く逆の存在である。<unordered_set>, <unordered_map>ヘッダが追加。hash_set(SGI版STLに含まれるライブラリ)などでないが、標準のset,mapはイテレータを用いて順序付けされた(ソートされた)要素アクセスが可能であるのに対し、unordered_set, unordered_mapでは不可能であることを示している。実装ではなくインターフェース(利用法)に由来した名前をつける発想である。<regex>ヘッダが追加。 - regex, regex_match, regex_search, regex_replace, etcC++はC言語と互換になるように設計されているものの、現在C++は厳密な上位互換ではない。TR1はその溝を埋めるため<complex>, <locale>, <cmath>その他のヘッダに拡張を行っている。これによってC99とある程度は近づいたものの、C99の全てがTR1に含まれているわけではない。
C++ Technical Report 2 も作られたが[7]、正式に出版されることはなかった。
|
|||||||||||||||||