【发布时间】:2016-07-18 16:31:36
【问题描述】:
我正在使用继承自 opencv Rect 的 A 类。 A 只是添加了一些我想在执行期间跟踪的变量。
class A: public Rect { //code, constructors... }
我想使用 opencv 方法 detectMultiScale,它需要一个空的 vector<Rect>,然后用预期的输出填充它。
如何传递一个空的继承对象向量,即来自 Rect 的 vector<A> 并期望在方法中捕获基类? (此时我明白了,方法是一个黑盒子,我不想编译opencv重新声明一些东西)。
【问题讨论】:
-
vector<Rect>和vector<A>是两种完全不同的类型。如果函数需要vector<Rect>,则需要发送vector<Rect>,仅此而已。 -
另外,你为什么要从
Rect派生而不是派生自它。如果Rect有一个虚拟析构函数,那是一回事,但Rect的设计者从来没有打算将它用于您使用它的目的。也许Rect应该是A的成员,而不是从Rect派生A。 -
就像保罗说的那样,您似乎在滥用公共继承。
A更有可能必须拥有Rect或通过其他方式与其中一个关联。 -
我之前的方案是一个拥有一个矩形的类,我想我可以扩展。回到旧的(但正确的)设计。
-
谷歌“一袋苹果不是一袋水果”。
标签: c++ inheritance vector