私は私がかなり気難しいと感じる問題を抱えています。趣味のプロジェクトでは、インターフェイスクラスへのポインタのstd :: listがあります。これは、インターフェイスのさまざまな具体的な実装を指します。
たとえば、次のようなものがあるとします。
class Seafood ...
class Fishstick : public Seafood ...
class Squid : public Seafood ...
...
std::list<Seafood*> buffet;
ビュッフェにさまざまなシーフードアイテムを入れたので、キッチンからさらに注文する必要があるかどうかを確認するために、利用できるフィッシュスティックの数を数えたいと思います。
RTTIまたはその不正な実装なしでこれを行うにはどうすればよいですか?RTTIを使用したい場合は、OOPに間違った方法でアプローチしている、および/またはソリューションを再設計する必要があると主張する記事をいくつか読みました。この問題に対処するいくつかのパターンまたは他の解決策はありますか?これまで何度も浮上しなければならなかったと思います。
ある種の仮想関数であることが明らかだと思っていましたが、RTTIの安っぽいバージョン、またはインターフェイスへの子孫に関する知識(CountIfFishstick / IsFishstick / Is(type))を組み込むことなく、これを行う方法を理解することはできません。 )。
編集:頭に浮かんだもう1つのことは、フィッシュスティックの1つのリスト、イカの1つのリストなどを保持することです。しかし、それは確かにインターフェイス/実装の目的全体を無効にします。