私は、使用するデータ構造を除いて完全に同一の 4 つのアルゴリズムを実装しています — 2 つの use priority_queue
、1 つの uses stack
、および最後の uses queue
。それらは比較的長いので、コンテナーの型をテンプレート引数として受け入れる関数テンプレートを 1 つだけ用意し、次のように、各アルゴリズムが適切な引数を使用してそのテンプレートを呼び出すようにしたいと考えています。
template <class Container>
void foo(/* args */)
{
Container dataStructure;
// Algorithm goes here
}
void queueBased(/* args */)
{
foo<queue<Item> >(/* args */);
}
void stackBased(/* args */)
{
foo<stack<Item> >(/* args */);
}
priority_queue
- および -ベースの実装でこれを行うことができましたが、 -ベースのアルゴリズムでは別の名前を使用して最前の要素 (ではなく) にアクセスするためstack
、同じことはできません。このケースに合わせてテンプレートを特殊化できることはわかっていますが、重複したコードが大量に発生することになります (これは避けたいことです)。queue
front( )
top( )
これを達成するための最良の方法は何ですか? top( )
私の最初の本能は、と同等の操作を追加する queue のラッパー クラスを作成することでしたがstack
、STL クラスをサブクラス化することは禁止されていると読んでいます。では、どうすればこの動作を取得できますか?