这是由于question太宽而被搁置的更窄的版本。
在现代C++设计的第6-7页上,Alexandrescu列出了在构建灵活设计方面多重继承比模板弱的三种方式。他特别指出,多重继承提供的机制很差(根据我对上下文的理解,方括号中的文本和格式是我的):
在这种情况下,即多重继承,为了构建一个灵活的
SmartPtr
,用户将通过继承一些BaseSmartPtr
类和两个类:MultiThreaded
和RefCounted
,构建一个多线程、引用计数的智能指针类。任何有经验的类设计人员都知道,这种天真的设计是行不通的。 ..。
在使用多重继承时,可以通过编写调用多个基类成员函数的成员函数来实现一些相当灵活的编排。那么,在多继承中缺少并在模板中呈现的业务流程是什么呢?
请注意,与模板相比,多重继承并不是所有的缺点都可以作为答案,但是在上面的引用中,Andei所说的机制只是一个缺点。特别是,请确保您不是在谈论Andrei列出的多重继承的另外两个弱点之一:
发布于 2015-10-07 09:32:47
我认为Alexandrescu在“力学”一段中所指的是在本章的其余部分中阐述的。他指的是基于策略的类设计比基于继承的类设计要灵活得多,特别是在实现和组合策略的各种方式方面,这与通过多重继承所允许的单一实现和组合相比更加灵活。
例如,在讨论Creator
策略时,他指出该策略只需要一个Create()方法,该方法返回要创建的类的指针,但没有指定它是虚拟的还是非静态的。他还展示了创建每个策略的几种方法:一个简单的策略类,比如(来自1.5节,跳过MallocCreator和PrototypeCreator策略)
模板结构OpNewCreator { static * Create() {返回新T;}; ..。
> //Library code
> template <class CreationPolicy>
> class WidgetManager:public CreationPolicy
> {
> ...
> };
..。 //应用代码类型为WidgetManager MyWidgetMgr;
也可以使用模板模板参数(1.5.1节)实现
//库代码模板<模板类创建Policy>类WidgetManager :公共CreationPolicy {.}//应用程序代码类型WidgetManager MyWidgetMgr
或(第1.5.2节)-作为模板成员函数实现:
结构OpNewCreator {模板静态T* Create() {返回新T;}
}
这些是在基于模板的策略类解决方案中可用而在多继承解决方案中不可用的灵活机制的示例。这些特殊的例子也许并不那么令人兴奋,可能是因为由于教学上的原因,它们必须简短而简单。
https://stackoverflow.com/questions/32602235
复制相似问题