1

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

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

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

4

3 回答 3

3

我会去:

class Matrix
{
public:
   //all the methods here

private:
    Implementation *_impl;
};

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

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

请注意,这_impl很容易成为一切,而不仅仅是一个指针。

于 2012-05-30T17:49:00.557 回答
1

使用 Pimpl 成语。

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

于 2012-05-30T17:55:23.500 回答
0

以下应该有效:

virtual MyMatrix* MyMatrix::operator* (const MyMatrix & other) const = 0;
于 2012-05-30T17:46:05.653 回答