Rogue Wave バナー
前へマニュアルの先頭へ目次索引次へ

16.2 標準コンテナに基づく構築

既存の標準 C++ ライブラリコンテナを使用して、ユーザー独自のコンテナを作成する方法を説明します。たとえば、本質的にソートされない一意の値を要求する set コンテナを実装するとします。同時に、アルゴリズムグループをその set に適用するとします。コンテナは、確かにシーケンスですが、連想コンテナは定義によりソートされるため、連想コンテナではありません。アルゴリズムセットが要求する反復子によって、これらのアルゴリズムを適用できるコンテナの範囲が決定されるため、反復子の型が適当な他のシーケンスがあるとすれば、アルゴリズムはこれらのシーケンスには有効な場合があります。アルゴリズムが順方向反復子のみを要求する場合、このアルゴリズムは一般的に使用することができます。これに対して、ランダムアクセス反復子を要求する場合は、アルゴリズムの使用は非常に制限されます。

この set コンテナの単純な実装では、その多くの機構に既存の標準 C++ ライブラリコンテナを利用することができます。このコードの再使用は、以下の 3 とおりの方法で可能です。

以降の節で、各方法を検討します。

16.2.1 継承

継承は強力なオブジェクト指向プログラミングの機能であり、これによってオブジェクトは、他のオブジェクトから属性と動作を派生させることができます。ユーザー独自のコンテナを作成するには、既存の標準 C++ コンテナからコンテナを派生させ、特定の関数を置き換えて希望の動作を実現させます。以下に示すのは、vector コンテナから派生させるアプローチです。

16.2.2 汎用継承

ユーザー独自のコンテナを作成する第 2 の方法では、vector を指定する代わりに汎用アダプタを作成します。この場合は、テンプレートパラメータを使用して基本コンテナを作成します。

アダプタによる汎用継承を使用する場合、アダプタのインスタンス化に使用されるコンテナからデフォルトの機能と動作以上のものを期待することはできません。アダプタまたはそのユーザーが基本コンテナの提供する機能以上のものを期待している場合は、何が期待できるかをマニュアルに正確に明記しておく必要があります。

16.2.3 汎用合成

ユーザー独自のコンテナを作成する第 3 の方法は、継承の代わりに合成を使用します。この方法の意図は、標準 C++ ライブラリのアダプタである queuepriority queuestack に見ることができます。汎用合成を使用する場合、希望のインタフェースをすべて実装する必要があります。コンテナの提供するインタフェースのサブセットだけを提供することによってアダプタの動作を制限する場合、これが最も便利なオプションです。

コンテナを既存のコンテナに適合させる利点はたくさんあります。たとえば、適合させるコンテナの実装や仕様を再使用できることもその 1 つです。


前へマニュアルの先頭へ目次索引次へ
Copyright (c) 1998, Rogue Wave Software, Inc.
このマニュアルに関する誤りのご指摘やご質問は、電子メールにてお送りください。
OEM リリース, 1998 年 6 月