0

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);

不思議に思うかもしれませんが、私はそれが適切だとは思いませんが、ThingはopencvのMatです。ただし、この質問は、上記が一方の方法で機能するのに、もう一方の方法では機能しない理由についてです。

興味深いことに、オブジェクト全体、またはそのオブジェクトのプロパティをメソッドに渡すと、どちらがよりパフォーマンスが高くなりますか?両方が機能するか、少なくとも許容できることを示唆しています。私は間違いなく何か間違ったことをしていますが、これは私が気付いていないopenCVの何かに起因している可能性があります。

編集:.property値に対して効果的に画像操作を実行しています。お気に入り

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

それが機能していないとき、私はpyrDownが有効になるのを見ていません。

4

1 に答える 1

1

これはおそらくオブジェクトのスライスが原因です(私はopenCVに精通していません)。最初の例では:

ChildObject in = myObject.getObjFromVector(0); 

コピーは、ではなく、タイプのgetObjFromVector()asの戻り値によって参照されるオブジェクトで作成されます。inChildObjectChildObject&

2番目の例では、返された参照を関数に直接渡すため、オブジェクトのスライスは発生しません。

于 2012-07-25T15:47:33.533 に答える