C++ について根本的な誤解があったようです :<
ポリモーフィック コンテナ ソリューションが気に入っています。SO、私の注意を引いてくれてありがとう:)
したがって、比較的一般的なコンテナー タイプのオブジェクトを作成する必要があります。また、ビジネス関連のロジックをカプセル化することもあります。ただし、プリミティブ データ型から複雑なクラスまで、本質的に任意のデータをこのコンテナーに格納する必要があります。
したがって、すぐにテンプレート クラスのアイデアにジャンプして、それで完了します。ただし、C++ ポリモーフィズムとテンプレートがうまく連携しないことに気付きました。作業しなければならない複雑なロジックがあるため、テンプレートまたはポリモーフィズムのいずれかに固執し、両方を実行させて C++ と戦おうとはしません。
最後に、どちらか一方を実行したいので、ポリモーフィズムを優先します。「このコンテナには比較可能な型が含まれています」のような制約を表現する方がはるかに簡単だと思います-la Java。
質問のトピックに連れて行きます: 最も抽象的なのは、「push(void* data) と pop(void* data)」に似たものを持つ「コンテナー」の純粋な仮想インターフェイスを持つことができると想像します、実際にスタックを実装しようとしているわけではありません)。
ただし、トップレベルの void* はあまり好きではありません。言うまでもなく、具体的なコンテナーが処理できるデータの型に制約を追加するたびに、署名が変更されます。
要約: 要素を取得するさまざまな方法を持つ比較的複雑なコンテナーがあります。コンテナに入る要素の制約を変更できるようにしたいと考えています。要素は、複数の種類のコンテナーで動作する必要があります (特定のコンテナーの制約を満たす限り)。
編集:コンテナ自体が多態的である必要があることにも言及する必要があります。これが、テンプレート化された C++ を使用したくない主な理由です。
では、Java 型インターフェースへの愛を捨てて、テンプレートを使用するべきでしょうか? void* を使用して、すべてを静的にキャストする必要がありますか? または、何も宣言しない空のクラス定義「Element」を使用し、それを「Element」階層の最上位クラスとして使用する必要がありますか?
私がスタック オーバーフローを気に入っている理由の 1 つは、回答の多くが、私が考えもしなかった他のアプローチに関する興味深い洞察を提供してくれることです。ですから、あなたの洞察とコメントを事前に感謝します。