Boost.MultiIndexのメジャーアップデート予定

【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;

これらは、非常にうれしいアップデートですね。