【multi_index】【ann】 Boost.MultiIndex 1.55 preview: major update with C++11 capabilities
Boost 1.55.0でMultiIndexライブラリのメジャーアップデートが予定されています。これはC++11仕様に合わせた修正になっていて、trunkではすでに入っています。
たとえば、以下のようなものが導入されます。
- ムーブサポート
以下のような、multi_index_container
を返す関数があったとしても、ムーブが働くため、コピーは発生しません。
employee_set extract_employees(const std::string& db); employee_set cont = extract_employees("employees.dat"); // データのコピーは発生しない
ムーブサポートはBoost.Moveベースで行われているので、C++03環境であってもムーブの恩恵を受けられます。
- 初期化子リストのサポート
これは、initializer_list
をサポートしているコンパイラ環境でのみ使用できる機能です。
employee_set es8{{0,"Rose",40,4512},{1,"Mary",38,3345},{2,"Jo",25,7102}};
- emplace関数
C++11で標準ライブラリのコンテナに入った、要素を追加する関数emplace()
/emplace_back()
が、multi_index_container
でも使用できるようになります。
es.emplace(0,"Joe",31,1123); es.get<3>().emplace_back(3,"Judy",39,6201);
- コピー不可な要素型を許可
ムーブサポートにともない、multi_index_container
にはコピー不可でムーブ可能なオブジェクトを要素型に設定できるようになります。
typedef multi_index_container<
std::unique_ptr<employee>,
indexed_by<…>
> employee_ptr_set;
これらは、非常にうれしいアップデートですね。