【发布时间】:2013-02-25 13:03:27
【问题描述】:
我最近遇到了一个烦人的问题,我对自己的解决方法不满意:我有一个程序维护一个指向基类的指针向量,并且我在那里存储了所有类型的子对象指针。现在,每个子类都有自己的方法,主程序可能会或不会调用这些方法,具体取决于对象的类型(请注意,尽管它们都大量使用基类的通用方法,因此这证明了继承的合理性)。
我发现有一个“对象标识符”来检查类类型(然后调用或不调用方法)很有用,这已经不是很漂亮,但这不是主要的不便之处。主要的不便之处在于,如果我想真正能够使用基类指针调用派生类方法(或者甚至只是将指针存储在指针数组中),那么需要在基类中将派生方法声明为虚拟类。
从 C++ 编码的角度来看是有意义的.. 但这对我来说是不切实际的(从 开发 的角度来看),因为我计划在不同的环境中创建许多不同的子类文件,可能由不同的人制作,我不想每次都调整/维护基类,以添加虚拟方法!
如何做到这一点?本质上,我要问(我猜)是如何实现类似 Objective-C NSArrays 的东西——如果你向一个没有实现该方法的对象发送消息,那么什么都不会发生。
问候
【问题讨论】:
-
您是否注意到编程网站上的代码比对所述代码的松散描述更好?
-
使用段落!在一个段落中阅读这么多内容令人恐惧。
-
“如何实现Objective-C NSArrays之类的东西——如果你向一个没有实现该方法的对象发送消息,那么什么都不会发生”。我真的希望这是不可能的。我真的这样做了。
-
这只是说明 NSArrays 必须有多棒。还有,为什么声明方法
virtual会不方便? -
如果您对子类型有这样的贬低差异,那么它们可能一开始就不属于同一个层次结构。如果他们这样做了,那么请考虑扩展您的基本合同并提供模板实现,以在 detectable 缺乏支持的情况下怠慢非必需的实现(即 E_NOTIMPL 条件)。但是,我仍然认为,您应该认真考虑 (a) 发布代码,以及 (b) 重新考虑您的设计以更好地实现基层。