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

图像处理 视频分析 机器视觉 模式识别

方向比努力更重要

 
 
 

日志

 
 
关于我

河北软件开发项目,电子警察卡口项目,公安天网项目,媒体流处理,数字图像处理。媒体服务器 RTSP、图像处理、车牌识别……DCT变换,H.264压缩

模板参数仅作为函数的返回值  

2017-03-18 21:56:14|  分类: C + 算法 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
程序中写过这样几个函数:

模板参数仅作为函数的返回值 - 河北程序员 - 图像处理 视频分析 机器视觉 图像识别
 1unsigned int extractUInt(byte *element)
 2模板参数仅作为函数的返回值 - 河北程序员 - 图像处理 视频分析 机器视觉 图像识别{
 3    byte id = 0;
 4    byte *decodedUInt = NULL;
 5    unsigned short decodedUIntLength = ElementHandler::decode(element, &id, &decodedUInt);
 6    unsigned int ui = 0;
 7    memcpy_s(&ui, sizeof(ui), decodedUInt, decodedUIntLength);
 8
 9    delete []decodedUInt;
10    return ui;
11}

模板参数仅作为函数的返回值 - 河北程序员 - 图像处理 视频分析 机器视觉 图像识别
 1unsigned short extractUShort(byte *element)
 2模板参数仅作为函数的返回值 - 河北程序员 - 图像处理 视频分析 机器视觉 图像识别{
 3    byte id = 0;
 4    byte *decodedUShort = NULL;
 5    unsigned short decodedUShortLength = ElementHandler::decode(element, &id, &decodedUShort);
 6    unsigned short us = 0;
 7    memcpy_s(&us, sizeof(us), decodedUShort, decodedUShortLength);
 8
 9    delete []decodedUShort;
10    return us;
11}

模板参数仅作为函数的返回值 - 河北程序员 - 图像处理 视频分析 机器视觉 图像识别
 1byte extractByte(byte *element)
 2模板参数仅作为函数的返回值 - 河北程序员 - 图像处理 视频分析 机器视觉 图像识别{
 3    byte id = 0;
 4    byte *decodedByte = NULL;
 5    unsigned short decodedByteLength = ElementHandler::decode(element, &id, &decodedByte);
 6    byte by = 0;
 7    //memcpy_s(&by, sizeof(by), decodedByte, decodedByteLength);
 8    by = *decodedByte;
 9
10    delete []decodedByte;
11    return by;
12}

写的时候并未觉得异样,昨天再次查看的时候才发现三个函数语义重复,仅返回值不同,于是想到模板函数。想当然地写成了这样:

模板参数仅作为函数的返回值 - 河北程序员 - 图像处理 视频分析 机器视觉 图像识别
 1template<class T>
 2T extractNumber(byte *element)
 3模板参数仅作为函数的返回值 - 河北程序员 - 图像处理 视频分析 机器视觉 图像识别{
 4    byte id = 0;
 5    byte *decoded = NULL;
 6    unsigned short decodedLength = ElementHandler::decode(element, &id, &decoded);
 7
 8    T t = 0;
 9    memcpy_s(&t, sizeof(t), decoded, decodedLength);
10
11    delete []decoded;
12    return t;
13}

编译时未报错,但在调用时

1unsigned short us = extractNumber(element);

会出现编译错误,提示无法为“T”推导模板参数。改成如下模样即可解决问题:

1unsigned short us = extractNumber<unsigned short>(element);
  评论这张
 
阅读(197)| 评论(0)

历史上的今天

评论

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

页脚

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