私は、使用するデータ構造を除いて完全に同一の 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、同じことはできません。このケースに合わせてテンプレートを特殊化できることはわかっていますが、重複したコードが大量に発生することになります (これは避けたいことです)。queuefront( )top( )
これを達成するための最良の方法は何ですか? top( )私の最初の本能は、と同等の操作を追加する queue のラッパー クラスを作成することでしたがstack、STL クラスをサブクラス化することは禁止されていると読んでいます。では、どうすればこの動作を取得できますか?