我想为矩阵库创建一个包装类,例如支持矩阵乘法:
MyMatrix MyMatrix::operator* (const MyMatrix & other) const { ... }
我的第一个想法是,如果我创建一个包含上述签名作为纯虚函数的抽象类MyMatrix
(并从中派生我的包装器)会很酷,但事实证明这不是可能因为该函数具有抽象返回类型。我想知道这个问题的干净解决方案是什么样的。或者抽象类是否接近错误,我应该使用具体的包装类吗?
答案 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;