3.6. 要素の型を与えない状態のコンテナ

Bezelは、通常のコンテナと対をなす、要素の型を与えない状態のコンテナを提供している。

T型の要素を格納する動的配列はbezel::vector::vector<T>と記述できるが、このコンテナに対応する「要素の型を与えない状態の」動的配列はbezel::vector::basic_vector<>と記述できる。例えば次のように用いる。

例 3.14. basic_vector

#include <bezel/array_allocation_policy/std_malloc.h>
#include <bezel/vector.h>

void foo()
{
  using namespace bezel::vector;
  using namespace bezel::array_allocation_policy;

  typedef basic_vector<allocation_is<std_malloc<> > > C_base;

  typedef C_base::bind<char>::type C_char;
  typedef C_base::bind<short>::type C_short;
  typedef C_base::bind<int>::type C_int;

  ...
}

コード内のbasic_vector<allocation_is<std_malloc<> > >が、要素の型を与えない状態の動的配列を表す記述である。ポリシークラスの指定方法は通常のvectorに対するものと同一である。また、別名定義されたC_baseに対してC_base::bind<char>::typeなどとして要素の型を束縛することで、指定した要素の型を格納する動的配列の型を導出することができる。導出された動的配列の振る舞いは導出元のC_baseに従う: この例では記憶領域割り当てをstd::mallocを用いて行うことになる。

通常のコンテナから要素の型を取り除くこともできる。例えば次の通り。

例 3.15. bindunbind

#include <bezel/array_allocation_policy/std_malloc.h>
#include <bezel/vector.h>

void foo()
{
  using namespace bezel::vector;
  using namespace bezel::array_allocation_policy;

  typedef vector<char, allocation_is<std_malloc<> > > C_char;

  typedef C_char::unbind::bind<short>::type C_short;
  typedef C_char::unbind::bind<int>::type C_int;

  ...
}