通用编程概念作为继承的替代

时间:2013-10-19 19:36:34

标签: c++ inheritance generic-programming

我正在处理一段代码,其中几个元素可以具有方向,这意味着它们的空间位置相对于参考框架。

我可以创建一个名为OrientedObject的抽象基类,然后创建一个作用于此类实例的算法集合。

我还可以定义自己的oriented概念,并编写符合实现概念的类型的通用算法(类似于Boost Geometry Library的设计)。

根据Boost Generic Programming Techniques页面:

  

概念是一组由有效表达式组成的需求,   关联类型,不变量和复杂性保证。一种类型   据说满足要求是对概念进行建模。一个概念可以   扩展另一个概念的要求,这个概念被称为   细化。

因此,oriented概念可以定义为必要类型(例如向量),有效操作(例如rotate)等的集合。

在我看来,如果继承模型关系,概念定义 ,那么概念代表一种继承形式,恰好更具实用性和可扩展性(沿着 duck typing 的路线),如果在正确定义方面也更加智能化。

现在,如果想要创建相关类型的容器,则继承是必要的。例如,我无法创建面向类型的容器,除非它们属于同一个基类。

所以,我很难决定是用concept还是用继承来定义我的概念(我不能想到任何其他形式)。

你能提供任何指导吗?

0 个答案:

没有答案