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

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

C++11及BOOST特性之十九对concept的理解  

2014-10-23 15:15:06|  分类: C++(VC)编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

C++11BOOST特性之十九对concept的理解

 

原来一直想总结一下关于concept的学习的一点点小心得,可是后来不知道为什么竟然忘记了,昨天偶尔翻到了记事簿里,看到这个,今天就重新整理了一下。

Cocept,英文就是概念的意思,这个在C++0X时讨论是有的,但是在C++11出来后却发现没有了,不过怎么说呢,应该说是延后讨论了。这里可以先学习一下。

在最初的C++0X以前,C++标准中的一些概念主要是通过文档来体现出来,比如应该怎么做不应该怎么做,看下面的例子:

template<typename T>

static void Display(const T& t)

{

    cout << t.Msg() << endl;

}

也就是说,你传进来的参数里面必须得有Msg这个函数,如果没有,不就悲催了,这个东西其实你就可以理解成一个概念(上面的例子,如果在跟别人讲得时候儿,人们经常会说,这个是什么概念呢?是不是很像。)

如果照这样的理解来看,前面提到的SFINAE技巧应该就是Cocept的一种吧。

再换一句话来说,其实这就是对模板的的类成员的一种约束或者说模板的一种约束,举一个C#的例子,如果你想让你写的泛型类支持foreach就得把泛型类继承IEnumerable,这样你就可以用foreach来遍历你的泛型成员了。

其实通过种种情况都可以大致猜测一下,这个Concept其实就是向代码检查或者说编译器的检查提供一个机会,防止别人在使用你的代码时,不按照你的规范来,产生意外的情况,特别是在C++中,这个意外可能会产生在不确定的情况下,那么就非常危险了。

C++弄得这么越来越复杂了,真是没有办法了。怪不得学C++的人越来越少。

在下面的两篇博文中有更详细的说明就不再转载,大家有兴趣可以自己去看。

http://www.cnblogs.com/ly4cn/archive/2007/09/09/887809.html

http://blog.csdn.net/pongba/article/details/1726031

  评论这张
 
阅读(409)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

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

页脚

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