C++ typedef的替代方法或将typedef与if-else一起使用的正确方法
我有以下情况:C++ typedef的替代方法或将typedef与if-else一起使用的正确方法,c++,typedef,C++,Typedef,我有以下情况: if( type == 1) { typedef itk::Image<unsigned char, 3> itkImageType; itkImageType::Pointer image; image =Open<itkImageType>(filename); writeimage->Graft(image); } else if(type == 2) { typ
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);
}
if(类型==1)
{
typedef-itk::Image-itkImageType;
itkImageType::指针图像;
图像=打开(文件名);
写入图像->移植(图像);
}
else if(类型==2)
{
typedef-itk::Image-itkImageType;
itkImageType::指针图像;
图像=打开(文件名);
写入图像->移植(图像);
}
共有10个案例,typedef之后的内容在所有if-else中都很常见。我想删除此代码重复,但由于typedef具有本地作用域,所以我必须这样做。有什么方法可以做到这一点吗?只需将常用的东西放在函数中即可。这就是函数的用途:
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;
}
模板
void doStuffAndOpen(){
//一些使用像素类型的东西
打开(文件名);
}
//然后,无论你想在哪里用像素类型做东西
开关(类型){
案例1:
doStuffAndOpen();
打破
案例2:
doStuffAndOpen();
打破
}
只需将常用内容放入函数中即可。这就是函数的用途:
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;
}
模板
void doStuffAndOpen(){
//一些使用像素类型的东西
打开(文件名);
}
//然后,无论你想在哪里用像素类型做东西
开关(类型){
案例1:
doStuffAndOpen();
打破
案例2:
doStuffAndOpen();
打破
}
只要。。。将所有常用的内容放在函数模板中?编译时是否知道type
的值?实际上,为了便于理解,我删除了该常用内容中的一些行,还有另一个typedef,它使用的是PixelType,实际上,我必须将该类型传递给Open函数。我刚刚又编辑了一个问题。。。将所有常用的内容放在函数模板中?编译时是否知道type
的值?实际上,为了便于理解,我删除了该常用内容中的一些行,还有另一个typedef,它使用的是PixelType,实际上,我必须将该类型传递给Open函数。我重新编辑了问题不要忘记案例1中的中断;-)不要忘记案例1中的中断;-)