C ++中的抽象矩阵类

时间:2012-05-30 17:44:16

标签: c++ design-patterns abstract-class

我想为矩阵库创建一个包装类,例如支持矩阵乘法:

MyMatrix MyMatrix::operator* (const MyMatrix & other) const { ... }

我的第一个想法是,如果我创建一个包含上述签名作为纯虚函数的抽象类MyMatrix(并从中派生我的包装器)会很酷,但事实证明这不是可能因为该函数具有抽象返回类型。我想知道这个问题的干净解决方案是什么样的。或者抽象类是否接近错误,我应该使用具体的包装类吗?

3 个答案:

答案 0 :(得分:3)

我会选择:

class Matrix
{
public:
   //all the methods here

private:
    Implementation *_impl;
};

因此,该类的用户将在任何地方使用Matrix类,您将使用“Implementaion”轻松实现该接口。

此外,如果您稍后需要更改实施 - 它不会影响客户的代码。只是Matrix

的实现

注意_impl可以轻松成为一切,而不仅仅是指针。

答案 1 :(得分:1)

使用Pimpl Idiom。

在您的情况下,Matrix是一个具体类,拥有(保存指针)抽象MatrixImpl类型对象,并将所有方法转发给它。

答案 2 :(得分:0)

以下内容应该有效:

virtual MyMatrix* MyMatrix::operator* (const MyMatrix & other) const = 0;