注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

八哥吧室

那山沟里真的有山花吗

 
 
 

日志

 
 
 
 

C++模板的一点笔记  

2011-03-29 21:55:28|  分类: C/C++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
  •      函数参数与类型
因为想实现一个ITK函数将一组3维的数据保存其中的一个sclie保存成jpg文件来查看。首先想到用下面的函数定义:
template< class TImageType >
void SaveSlice( typename TImageType::Pointer inputImage, unsigned int nSlice = 0, const char * sFileName = "out.jpg" );

之所以要传入图像的指针是因为ITK其他的很多的Filter的GetOutput()返回的都是指针,通过指针来得到实例对象是无法实现的。而定义图像的类型TImageType而不是直接定义指针的类型是因为在函数体中需要用到图像类型中定义的一些东西如RegionType。虽然这貌似很好,但是发现函数代码虽能通过编译,但是在使用该函数时的代码则通不过编译了。比如下面调用的代码:

 SaveSlice( filter->GetOutput(), 10, "out.jpg" );
  
出现错误提示无法确定TImageType是什么类型。通过分析可以发现我们传进去的是TImageType::Pointer的类型的对象,对于类中定义的类型当然无法反回去得到定义其类的类型,自然无法通过TImageType::Pointer的类型而得到TImageType的类型,也就让编译器很为难了,根本就不知道定义的<class TImageType>是什么东西了,所以编译出错。后来看了下ITK中实现的方法其实很简单直接用了纯指针而不是Smart Pointer了,按其方法该函数就可以定义为:

template< class TImageType >
void SaveSlice( TImageType * inputImage, unsigned int nSlice = 0, const char * sFileName = "out.jpg" );
  评论这张
 
阅读(127)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017