我遇到一个让我感到很愚蠢的问题。在一个业余项目中,我有一个std::list指向接口(interface)类的指针,该指针指向该接口(interface)的各种具体实现。

例如,说我有以下内容:

class Seafood ...
class Fishstick : public Seafood ...
class Squid : public Seafood ...
...
std::list<Seafood*> buffet;

现在,我的自助餐中摆满了各种海鲜,现在我想计算一下我有多少鱼竿,以查看是否需要从厨房订购更多的鱼竿。

如果没有RTTI或某些不可靠的实现,我该怎么办?我读过一些文章声称,如果您发现自己想使用RTTI,那么您将以错误的方式使用OOP,并且/或者应该重新设计您的解决方案。是否有一些模式或其他解决方案可以解决此问题?我敢肯定必须浮出水面很多次。

我当时在想显而易见的某种虚函数,但是我无法弄清楚如何在不构建低俗的RTTI版本或不知道有关后代进入接口(interface)的一些知识的情况下做到这一点(CountIfFishstick / IsFishstick / Is(type) )。

编辑:我想到的另一件事是保留一份鱼竿列表,一份鱿鱼列表等。但这肯定会破坏接口(interface)/实现的整个目的。

最佳答案

您可能想要某种访客模式的变体。有很多,很难说你想要哪一个。我可能建议您获取Modern C++ Design,并复习Alexendrescu的实现。否则,谷歌“访客模式”,您将获得1000公里的链接进行阅读。

关于c++ - 不使用RTTI计数对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10759559/

10-11 23:06