多重继承和泛型程序
Multiple inheritance and generic program
我正在阅读Andrei Alex的《现代c++设计:泛型编程和设计模式应用》。我才刚开始。在第6页,它有以下对多重继承的批评:
使用多重继承组合独立特征的问题如下:
- …
- 类型信息。基类的类型不够信息来完成他们的任务。例如,想象你试图通过从
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在这里说的是一个外部复制工具,而不是一个需要修改被复制类的侵入性工具。为给定类实现深度复制的正确方法可能因类的实现而有所不同,因此如果没有向外部复制工具提供类型信息的方法,则无法选择正确的方法。
深度复制在这里可能不是一个很好的例子——他关于广义函子、智能指针和多重分派的章节是我认为他基于策略设计的更好的现实例子。
相关文章:
- 错误处理.将系统错误代码映射到泛型
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- 链表的泛型函数remove()与成员函数remove)
- 给定一个类型,如何派生一个泛型更广泛的类型(例如,用于溢出安全求和)?
- 模板化接口 - 创建一个泛型模板类以返回任何容器
- 如何编写将要继承的泛型代码?
- C++17 如何保存泛型可调用对象以供以后使用
- 使用宏扩展的泛型:为什么指令缓存使用不当?
- C++泛型类错误,问题出在哪里?
- C++泛型类,单独实现?
- 将参数传递给泛型 lambda 时复制构造函数不正确
- 泛型枚举和其他类型的重载模板函数
- 使用泛型类型推送到堆栈时出现问题
- 可变参数泛型 lambda 和函数重载
- C++ 泛型和多态性:这种模式可行吗?
- 这些语句是否等效(静态变量、常量变量和泛型)
- Java 是否像C++模板一样具有泛型推论?
- C++如何获取泛型catch处理程序中抛出的异常的句柄
- 多重继承和泛型程序
- 如何在托管CLR的本地c++应用程序中创建泛型.net类型(不使用c++ /CLI)