将对象的属性传递给方法时的范围问题。 (opencv相关)

时间:2012-07-25 15:39:01

标签: c++ opencv properties scope

刚刚学习C ++,遇到了一个问题,我不确定为什么会出现以下情况。

不起作用

ChildObject in = myObject.getObjFromVector(0);
ChildObject out = myObject.getObjFromVector(1);
doSomething(in.property, out.property); // void doSomething(Thing &in, Thing &out)

where 
ChildObject& getObjFromVector(int index)

作品

process(myObject.getObjFromVector(0).property, myObject.getObjFromVector(1).property);

如果你想知道,虽然我认为它不相关,但事情是来自opencv。然而,这个问题是为什么上述工作以一种方式而不是另一种方式工作。

有趣的是Which is more performant, passing a method the entire object, or a property of that object?表明两者都应该起作用,或者至少是可以接受的。我肯定做错了,这可能是openCV中我不知道的事情。

编辑: 我正在有效地对.property值进行一些图像处理。喜欢

process (Mat &src, Mat &out){
...
pyrDown(src, result, Size(src.cols / 2, src.rows / 2));
...

当它不工作时,我没有看到pyrDown生效。

1 个答案:

答案 0 :(得分:1)

这可能是由于object slicing(我不熟悉openCV)。在第一个例子中:

ChildObject in = myObject.getObjFromVector(0); 

副本由getObjFromVector()的返回值引用的对象构成,in的类型为ChildObject,而不是ChildObject&

第二个示例将直接返回的引用传递给函数,因此不会发生对象切片。