我想为支持矩阵乘法的矩阵库创建一个包装类:
MyMatrix MyMatrix::operator* (const MyMatrix & other) const { ... }
我的第一个想法是,如果我创建一个MyMatrix
包含上述签名作为纯虚函数的抽象类(并从中派生我的包装器)会很酷,但事实证明这是不可能的,因为该函数具有抽象返回类型。我想知道这个问题的干净解决方案是什么样的。或者抽象类方法是错误的,我应该只使用具体的包装类吗?
我想为支持矩阵乘法的矩阵库创建一个包装类:
MyMatrix MyMatrix::operator* (const MyMatrix & other) const { ... }
我的第一个想法是,如果我创建一个MyMatrix
包含上述签名作为纯虚函数的抽象类(并从中派生我的包装器)会很酷,但事实证明这是不可能的,因为该函数具有抽象返回类型。我想知道这个问题的干净解决方案是什么样的。或者抽象类方法是错误的,我应该只使用具体的包装类吗?
我会去:
class Matrix
{
public:
//all the methods here
private:
Implementation *_impl;
};
因此,该类的用户将在Matrix
任何地方只使用类,您将使用“Implementaion”轻松实现接口。
此外,如果您稍后需要更改实现 - 它不会影响您客户的代码。只是Matrix
类的实现
请注意,这_impl
很容易成为一切,而不仅仅是一个指针。
使用 Pimpl 成语。
在您的情况下,Matrix
是一个具体类,它拥有(持有指向)抽象MatrixImpl
类型对象,并将所有方法转发给它。
以下应该有效:
virtual MyMatrix* MyMatrix::operator* (const MyMatrix & other) const = 0;