我想用一些功能扩展 cv::Mat 类(如序列化、获取数据指针的所有权、颜色排序 (rgb/bgr/...))。
一种可能性是创建一个新类(比如 CustomMat),其中包含一个 cv::Mat 作为成员:
class CustomMat {
int width() { return m_mat.size().width; }
int height() { return m_mat.size().height; }
...
cv::Mat getMat() { return m_mat; }
private:
cv::Mat m_mat;
}
但是,我必须转发所有构造函数和成员才能正确使用外部类。或者我必须使用类似 customMat.getMat().size().width
的东西,这也不是很好。
另一种方法是直接从 cv::Mat 继承:
class CustomMat : public cv::Mat {
...
}
对于像 cv::Mat 这样的复杂类,这对我来说似乎有点可疑。您看到任何缺点了吗?或者这很好吗?
最佳答案
我看到了继承方法的缺点。 cv::Mat 没有虚拟析构函数。这意味着,您在为 CustomMat
使用多态行为时可能会遇到麻烦。看看下面的例子。
cv::Mat* foo = new CustomMat;
delete foo;
在上述情况下,永远不会调用 CustomMat 的析构函数。
关于c++ - 从 cv::Mat 继承,一个好主意?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24929385/