C模板实例化取决于if子句
发布时间:2020-12-16 03:42:01 所属栏目:百科 来源:网络整理
导读:目前我正在做: if(dimension == 2){ typedef itk::Imageshort,2 ImageType; typedef itk::Imageunsigned int,2 IntegralImageType; m_pApp-train2,ImageType,IntegralImageType();}else{ typedef itk::Imageshort,3 ImageType; typedef itk::Imageunsigned
目前我正在做:
if(dimension == 2) { typedef itk::Image<short,2> ImageType; typedef itk::Image<unsigned int,2> IntegralImageType; m_pApp->train<2,ImageType,IntegralImageType>(); } else { typedef itk::Image<short,3> ImageType; typedef itk::Image<unsigned int,3> IntegralImageType; m_pApp->train<3,IntegralImageType>(); } 但我想这样做: if (dimension == 2) DIMENSION = 2; else DIMENSION = 3; typedef itk::Image<short,DIMENSION> ImageType; typedef itk::Image<unsigned int,DIMENSION> IntegralImageType; m_pApp->train<DIMENSION,IntegralImageType>(); 我无法做到这一点,因为c需要const变量用于模板实例化. 解决方法
您可以使用模板参数定义函数:
template<unsigned N> void train(){ typedef itk::Image<short,N> ImageType; typedef itk::Image<unsigned int,N> IntegralImageType; m_pApp->train<N,IntegralImageType>(); } 然后: if (dimension == 2) train<2>(); else train<3>(); 请注意,此代码将实例化两个模板(将为它们生成代码),因为在编译时无法知道将使用哪个模板. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |