スカラーストレージポリシーの実装が満たすべき要件について述べる。
ポリシーは、2相テンプレートと状態を持ち得るポリシークラスで構成される。フロントエンドのクラス名をpolicy_sample、バックエンド導出のために与えられた要素の型をTとすると、バックエンドのクラスは
typenamepolicy_sample::templatebind<T>::type
という記述で得られる。以降、バックエンドのクラス名をbackendと表記する。
backendは次のpublicなメンバ型を持つ。
pointer
型Tのオブジェクトを指すポインタの型。通常はT*。
const_pointer
型Tのconstオブジェクトを指すポインタの型。通常はconst T*。
reference
型Tのオブジェクトへの参照の型。通常はT&。
const_reference
型Tのconstオブジェクトへの参照の型。通常はconst T&。
initializer
backendに対する初期化オブジェクトの型。backendのオブジェクトは初期化オブジェクトを用いて構築できる。
backendは次のprotectedなメンバ関数を持つ。
backend()
オブジェクトを構築する。要素はデフォルトコンストラクタで初期化する。
backend(U init)
オブジェクトを構築する。初期化オブジェクトとしてinitを用いる。要素はデフォルトコンストラクタで初期化する。引数の型Uはinitializerもしくはconst initializer&のどちらかである。
backend(const_reference v)
オブジェクトを構築する。要素は初期値vで初期化する。
backend(const_reference v, U init)
オブジェクトを構築する。初期化オブジェクトとしてinitを用いる。要素は初期値vで初期化する。
backend(const backend& rhs)
同型のオブジェクトrhsを用いてオブジェクトを構築する。
~backend()
オブジェクトを破壊する。
backend& operator=(const backend& rhs)
同型のオブジェクトrhsの値を自身にコピーする。
void swap(backend& rhs)
自身とrhsの状態を入れ換える。
bool invariant() const
不変条件が満たされていれば真を返す。
initializer get_initializer() const
初期化オブジェクトを返す。
const_reference value() const
要素への参照を返す。
reference value()
要素への参照を返す。
ポリシークラスが通常満たすべき例外安全性と計算量の条件は次の通り。
表 6.5. スカラーストレージポリシーの例外安全性と計算量
| 操作 | 例外安全性 | 計算量 |
|---|---|---|
| すべてのコンストラクタ | strong | 定数 |
| デストラクタ | nothrow | 定数 |
| 代入 | strong | 定数 |
swap | nothrow | 定数 |
invariant | nothrow | 定数 |
get_initializer | strong | 定数 |
value | nothrow | 定数 |