0

私は次の条件を持っています:

if( type == 1)
    {
        typedef itk::Image<unsigned char, 3> itkImageType;
    itkImageType::Pointer image;
    image =Open<itkImageType>(filename);
    writeimage->Graft(image);
    }

else if(type == 2)
    {
        typedef itk::Image<unsigned char, 3> itkImageType;
    itkImageType::Pointer image;
    image =Open<itkImageType>(filename);
    writeimage->Graft(image);
    }

10個あり、typedef以降はすべてのif-elseで共通です。このコードの繰り返しを削除したいのですが、typedef にはローカル スコープがあるため、それを行う必要があります。これを行う方法はありますか?

4

1 に答える 1

3

共通のものを関数に入れるだけです。それが関数の目的です:

template <typename PixelType>
void doStuffAndOpen() {
    //Some stuff which use Pixel Type
    Open<PixelType>(filename);
}

// and then wherever you want to do stuff with the PixelType
switch (type) {
case 1:
    doStuffAndOpen<unsigned char>();
    break;
case 2:
    doStuffAndOpen<unsigned int>();
    break;
}
于 2013-07-08T09:42:08.993 に答える