我正在处理一段代码,其中几个元素可以具有方向,这意味着它们的空间位置相对于参考框架。
我可以创建一个名为OrientedObject
的抽象基类,然后创建一个作用于此类实例的算法集合。
我还可以定义自己的oriented
概念,并编写符合实现概念的类型的通用算法(类似于Boost Geometry Library的设计)。
根据Boost Generic Programming Techniques页面:
概念是一组由有效表达式组成的需求, 关联类型,不变量和复杂性保证。一种类型 据说满足要求是对概念进行建模。一个概念可以 扩展另一个概念的要求,这个概念被称为 细化。
因此,oriented
概念可以定义为必要类型(例如向量),有效操作(例如rotate
)等的集合。
在我看来,如果继承模型是关系,概念定义 是,那么概念代表一种继承形式,恰好更具实用性和可扩展性(沿着 duck typing 的路线),如果在正确定义方面也更加智能化。
现在,如果想要创建相关类型的容器,则继承是必要的。例如,我无法创建面向类型的容器,除非它们属于同一个基类。
所以,我很难决定是用concept
还是用继承来定义我的概念(我不能想到任何其他形式)。
你能提供任何指导吗?