IF ステートメント内でオブジェクトを宣言する次のコードがあります。IF 内で宣言するだけでは、残りのプログラムの範囲外であることを理解しています。したがって、ポインターを使用する必要があると思います。私の問題は、ユーザーに選択してもらいたいクラスが基本クラスから派生していることです。だから私はおそらくこの基本クラスに基づいてポインタを作成する必要があると考えました...それは正しいと思いますか?
私がやろうとしていることについては、以下を参照してください。私は正しいボールパークにいますか?
//create a stereo input object
StereoImage SO;
SO.open(File1,File2);
int StereoOption;
if (counter == 0) StereoOption = 1;
//think i need to create a pointer to the base class
SVAlgorithm *ptrSter;
//choose which method to use in stereo processing and set the base class pointer to derrived class
if (StereoOption == 1) {SVOpenCVBlockMatching DoStereo; cout << "Using option 1" << endl; *ptrSter = DoStereo;}
else if (StereoOption == 2) {SVOpenCVSemiGlobalBlockMatching DoStereo; cout << "Using option 2" << endl; *ptrSter = DoStereo;}
else if (StereoOption == 3) {SVNoMD DoStereo; cout << "Using option 3" << endl; *ptrSter = DoStereo;}
else if (StereoOption == 4) {SVCross DoStereo; cout << "Using option 4" << endl; *ptrSter = DoStereo;}
else if (StereoOption == 5) {SVAdaptDP DoStereo; cout << "Using option 5" << endl; *ptrSter = DoStereo;}
//set create DoStereo from the pointer
SVAlgorithm &DoStereo = *ptrSter;
//output matrix
Mat_<short> DispOut;
//load the disparity method params, compute it and show - works
DoStereo.loadParams();
DoStereo.compute(SO.getRawFrame(0),SO.getRawFrame(1),DispOut);
imshow("Disparity Map", DispOut*255);
次のクラスはすべて SVAlgorithm クラスから派生しています... SVOpenCVBlockMatching、SVOpenCVSemiGlobalBlockMatching、SVNoMD、SVCross、SVAdaptDP。