多重继承和泛型程序

Multiple inheritance and generic program

本文关键字:程序 泛型 多重继承      更新时间:2023-10-16

我正在阅读Andrei Alex的《现代c++设计:泛型编程和设计模式应用》。我才刚开始。在第6页,它有以下对多重继承的批评:

使用多重继承组合独立特征的问题如下:

  1. 类型信息。基类的类型不够信息来完成他们的任务。例如,想象你试图通过从DeepCopy派生智能指针类来实现深度复制基类。DeepCopy有什么界面?它必须创建a的对象输入它还不知道。

我想知道这个评论是否有缺陷。

接口驱动设计通常有基类一个纯虚类和子类实现接口。以DeepCopy为例,我将这样做:
struct DeepCopy 
{
   virtual void copy(DeepCopy *src) = 0;
};
class MyClass : public DeepCopy, public AnotherIntf
{
   public:
      virtual void copy(DeepCopy *src); 
};

在这个例子中,MyClass是实现者,它是一个真正的类。

也许我在这里错过了Andrei批评的要点。

你觉得怎么样?

我的理解是Alexandrescu在这里说的是一个外部复制工具,而不是一个需要修改被复制类的侵入性工具。为给定类实现深度复制的正确方法可能因类的实现而有所不同,因此如果没有向外部复制工具提供类型信息的方法,则无法选择正确的方法。

深度复制在这里可能不是一个很好的例子——他关于广义函子、智能指针和多重分派的章节是我认为他基于策略设计的更好的现实例子。