我正在阅读"现代C ++设计:应用的通用编程和设计模式"安德烈亚历克斯刚刚开始。在第6页,它具有以下多重继承的批评:
使用多重继承来组装单独功能的问题如下:
- ...
- 类型信息。基类的类型不足 执行任务的信息。例如,假设您尝试 通过派生
醇>DeepCopy
为您的智能指针类实现深层复制 基类。DeepCopy
会有什么接口?它必须创建一个对象 输入它还不知道。
我想知道这个特别的批评是否存在缺陷。
接口驱动设计通常具有基类和纯虚拟类,子类实现接口。以DeepCopy为例,我会这样做:
struct DeepCopy
{
virtual void copy(DeepCopy *src) = 0;
};
class MyClass : public DeepCopy, public AnotherIntf
{
public:
virtual void copy(DeepCopy *src);
};
在这个例子中,MyClass是实现者,它是一个真正的类。
也许我想念安德烈在这里的批评点。
您怎么看?
答案 0 :(得分:0)
据我所知,Alexandrescu在这里谈到的是一个外部复制工具,而不是一个需要修改被复制的类的侵入式复制工具。实现给定类的深层复制的正确方法可能因类的实现而有所不同,因此如果没有向外部复制工具提供类型信息的方法,则无法选择正确的方法。
深层复制可能不是一个很好的例子 - 他关于广义仿函数,智能指针和多次发送的章节是我考虑更好的基于策略的设计的真实例子。