C++ Matrix类层次结构

bpw*_*621 9 c++ oop

应的矩阵的软件库有一个根类(例如,MatrixBase),从该多个专门(或更受约束)矩阵的类(例如,SparseMatrix,UpperTriangluarMatrix等等)导出?如果是这样,派生类应该公开/保护/私下派生吗?如果没有,它们是否应该用封装公共功能的实现类组成,否则不相关?别的什么?

我正与软件开发人员同事(我本身并不是这样)进行过对话,他们提到从一个更普遍的类中派生一个更受限制的类是一个常见的编程设计错误(例如,他使用了它的例子)CircleEllipse类中派生一个类似于矩阵设计问题并不是一个好主意,即使它确实是SparseMatrix"IS A" MatrixBase.对于基本操作,基类和派生类所呈现的接口应该相同; 对于特殊操作,派生类将具有可能无法为任意MatrixBase对象实现的其他功能.例如,我们只能为PositiveDefiniteMatrix类对象计算cholesky分解; 但是,乘以标量对于基类和派生类应该以相同的方式工作.此外,即使底层数据存储实现不同,它也operator()(int,int)应该按预期工作于任何类型的矩阵类.

我已经开始查看一些开源矩阵库,看起来这是一个混合包(或者我正在看一个混合的库包).我正在计划帮助重构一个数学库,这是一个争论的焦点,我希望得到的意见(除非对这个问题有一个客观的正确答案),关于什么样的设计理念会是最好的,任何合理方法的利弊是什么.

Rob*_*obb 0

拥有一个具有允许您构建特定矩阵的方法的 Matrix 基类是否有用?例如(一个非常简单的例子):

MatrixClass m;
m.buildRotationMatrix(/*params*/)
// Now m is a rotation matrix
Run Code Online (Sandbox Code Playgroud)

这在 OpenSceneGraph 框架中使用,并且非常适合我们的目的。然而,构建方法只是旋转或反转等。但我觉得它可以让你避免派生许多矩阵子类的问题。