C 箴言:从模板中分离出参数无关的代码(2)

2008-02-23 05:25:32来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

)被 derived classes(派生类)隐藏。还要注意 SquareMatrix 和 SquareMatrixBase 之间的继承关系是 private 的。这准确地反映了 base class(基类)存在的理由仅仅是简化 derived classes(派生类)的实现的事实,而不是表示 SquareMatrix 和 SquareMatrixBase 之间的一个概念上的 is-a 关系。(关于 private inheritance(私有继承)的信息,参见 《谨慎使用私有继承》。)

  迄今为止,还不错,但是有一个棘手的问题我们还没有提及。SquareMatrixBase::invert 怎样知道应操作什么数据?他从他的参数知道矩阵的大小,但是他怎样知道一个特定矩阵的数据在哪里呢?大概只有 derived class(派生类)才知道这些。derived class(派生类)如何把这些传达给 base class(基类)以便于 base class(基类)能够做这个转置呢?

  一种可能是为 SquareMatrixBase::invert 增加另一个的参数,也许是个指向存储矩阵数据的内存块的开始位置的指针。这样能够工作,但是十有八九,invert 不是 SquareMatrix 中仅有的能被写成一种 size-independent(大小无关)的方式并移入 SquareMatrixBase 的函数。假如有几个这样的函数,全都需要一种找到持有矩阵内的值的内存的方法。我们能够为他们全都增加一个额外的参数,但是我们一再重复地告诉 SquareMatrixBase 同样的信息。这看上去不太正常。



[1] [2] 下一页

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: C 之父Bjarne谈C 中的STL模板

下一篇: C 中的动态多维数组