我遇到了一个让我觉得很愚蠢的问题。在一个爱好项目中,我有一个指向接口类的指针的 std::list,它指向所述接口的各种具体实现。
例如,假设我有以下内容:
class Seafood ...
class Fishstick : public Seafood ...
class Squid : public Seafood ...
...
std::list<Seafood*> buffet;
现在我的自助餐里有不同的海鲜,我想计算一下我有多少鱼条,看看是否需要从厨房订购更多。
如果没有 RTTI 或其一些不正当的实现,我将如何做到这一点?我读过一些文章声称如果您发现自己想要使用 RTTI,那么您正在以错误的方式接近 OOP 和/或您的解决方案应该重新设计。是否有一些模式或其他解决方案可以解决这个问题?我敢肯定,以前曾多次浮出水面。
我在想很明显这是某种虚函数,但是如果不构建俗气的 RTTI 版本或有关接口中后代的一些知识(CountIfFishstick / IsFishstick / Is(type)),我无法弄清楚如何做到这一点)。
编辑:想到的另一件事是保留一份鱼竿列表,一份鱿鱼列表等。但这肯定会破坏界面/实现的整个目的。