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

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

方向比努力更重要

 
 
 

日志

 
 
关于我

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

c++ 函数返回值 模版 可变  

2016-05-07 08:54:31|  分类: C + 算法 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
template<typename _Tp> _Tp& at(int y,int x);                // cxcore.hpp (868)
template<typename _Tp>const _Tp& at(int y,int x)const;    // cxcore.hpp (870)
template<typename _Tp> _Tp& at(Point pt); // cxcore.hpp (869)
template<typename _Tp>const _Tp& at(Point pt)const;        // cxcore.hpp (871)
// defineded in cxmat.hpp (454-468)
typedefVec<float,2>Vec2f;// cxcore.hpp (254)

参考一个实例    http://www.2cto.com/kf/201311/260689.html
——————————————————————————————————————————
http://blog.163.com/sdjuanzi@126/blog/static/370330592013111322545/
————————————————————————————————————————————

返回类型后置语法

考虑下面这段代码:

template<class T, class U>
??? mul(T x, U y)
{
    return x*y;
}

函数mul()的返回类型要怎么写呢?当然,是“x*y类型”,但是这并不是一个数据类型,我们如何才能一开始就得到它的真实数据类型呢?在初步了解C++0x之后,你可能一开始想到使用decltype来推断“x*y”的数据类型:

template<class T, class U>
decltype(x*y) mul(T x, U y) // 注意这里的作用域
{
    return x*y;
}

但是,这种方式是行不通的,因为x和y不在作用域内。但是,我们可以这样写:

template<class T, class U>
// 难看别扭,且容易产生错误
decltype(*(T*)(0)**(U*)(0)) mul(T x, U y)
{
    return x*y;
}

如果称这种用法为“还可以”,就已经是过誉了。
C++11的解决办法是将返回类型放在它所属的函数名的后面:

template<class T, class U>
auto mul(T x, U y) -> decltype(x*y)
{
    return x*y;
}

这里我们使用了auto关键字,(auto在C++11中还有根据初始值推断数据类型的意义),在这里它的意思变为“返回类型将会稍后引出或指定”。

返回值后置语法最初并不是用于模板和返回值类型缩减的,它实际是用于解决作用域问题的。

struct List {
	struct Link { /* ... */ };
	Link* erase(Link* p);	// 移除p并返回p之前的链接
	// ...
};

List::Link* List::erase(Link* p) { /* ... */ }

第一个List::是必需的,这仅是因为List的作用域直到第二个List::才有效。更好的表示方式是:

auto List::erase(Link* p) -> Link* { /* ... */ }

现在,将函数返回类型后置,Link*就不需要使用明确的List::进行限定了。

参考:


  评论这张
 
阅读(318)| 评论(0)

历史上的今天

评论

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

页脚

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