Bezelは、ポリシークラスに基づくコンテナを提供するC++ライブラリである。
Bezelは、vector・list・mapなどの標準のものと同名のコンテナと、いくつかの追加のコンテナを提供する。各コンテナはSTLと共に使用できるように設計されている: 例えば次のように、標準コンテナと同様に扱うことができる。
int main()
{
typedef std::string T;
bezel::list::list<T> v;
{ T s; while (getline(std::cin, s)) v.push_back(s); }
v.sort();
std::copy(v.begin(), v.end(), std::ostream_iterator<T>(std::cout, "\n"));
}
Bezelのコンテナは標準コンテナとは異なる追加のテンプレートパラメータを持つ。テンプレートパラメータへと与えるポリシークラスを選択することで、アルゴリズムとデータ構造、記憶領域の割り当て方法、デバッグ向けチェック機構の有無などコンテナの振る舞いを制御することができる。例えばlistに対し、データ構造を単方向リストにし、記憶領域の割り当てにstd::mallocを用いるよう指定するなら、次のように記述する。
int main()
{
...
bezel::list::list<
T,
bezel::list::data_structure_is<
bezel::list::data_structure_policy::singly_linked>,
bezel::list::allocation_is<
bezel::scalar_allocation_policy::std_malloc<> >
> v;
...
}
ポリシークラスはコンパイル時に展開されるため、実行時の性能を損なわずにコンテナの振る舞いを変更できる。また、コンテナには任意のポリシークラスを与えることができる: 上記のようにBezelが提供するものを用いてもよいし、新たに定義してもよい。