专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

C模板22(基于traits的泛型程序设计)

  熟悉STL的了解traits,特别是typetraits,提供了很多traits,称为元函数,可以基于某个类型计算出所需的类型。
  Policy其实也是一种trait,只是后者强调类型,而前者重视行为。AndreiAlexandrescu,ModernCDesign的作者认为:
  policies和policyclasses有助于我们设计出安全、有效率且具高度弹性的设计元素,所谓policy,就是用来定义一个class和classtemplate的接口,该接口由下列之一或全部组成:内隐型别定义(innertypedefinition)、成员函数和成员变量。
  下面通过一个简单的例子来说明一下:计算某个序列的和。templatetypenameTTaccumulate(constTbegin,constTend){Tsum{};while(begin!end){sumbegin;begin;}returnsum;}
  上面代码很容易理解,不过其间也有几个隐式约束:序列必须是连续存放的,通过移动begin最终可以到达end,T类型可以通过缺省初始化为零值,其解引用的值能够使用运算。intnum〔〕{1,2,3,4,5};accumulate(num,num5);15charhello〔〕hello,world;accumulate(hello,hellosizeof(hello)1);120??
  好像有点问题,哦,原因是char的数值范围太小了,作为返回值的类型在累加计算过程中它溢出了。解决方式可以应用traits,定义模板参数T的累加和返回值类型时的关联类型(元函数)。templatetypenameTstructaccumulatetraits{usingtypeT;};templatestructaccumulatetraitschar{usingtypeint;};templatestructaccumulatetraitsshort{usingtypeint;};templatetypenameTusingaccumulatetraitsttypenameaccumulatetraitsT::type;templatetypenameTaccumulatetraitstTaccumulate(constTbegin,constTend){accumulatetraitstTsum{};while(begin!end){sumbegin;begin;}returnsum;}
  我们定义了一个trait(元函数)accumulatetraits,用来计算类型参数T的返回值类型:缺省返回T自己,对于size小于int的类型(如char,short)则返回int。我们还仿照C14的做法,定义了acculatetraitst,方便用户使用。intnum〔〕{1,2,3,4,5};accumulate(num,num5);15charhello〔〕hello,world;accumulate(hello,hellosizeof(hello)1);1160
  这回运行一切正常。accumulate模板函数对付基本数值类型足够了,但是accumulatetraitstTsum{};
  这里累加和sum变量的零值初始化的依赖有点让人担心(使用类型的缺省构造,且符合零值语义)。如果用于自定义类型,一不小心这里很容易挂掉。我们未雨绸缪,再添加一个policy,用来定义返回值类型的零值,这样将来如果需要支持的类型有特定的零值构建方式,可以使用特化技术来添加对此类型的支持。templatetypenameTstructaccumulatetraits{usingtypeT;inlinestaticconstexprtypezerovalue0;};templatestructaccumulatetraitschar{usingtypeint;inlinestaticconstexprintzerovalue0;};templatestructaccumulatetraitsshort{usingtypeint;inlinestaticconstexprintzerovalue0;};templatetypenameTusingaccumulatetraitsttypenameaccumulatetraitsT::type;templatetypenameTaccumulatetraitstTaccumulate(constTbegin,constTend){accumulatetraitstTsumaccumulatetraitsT::zerovalue;while(begin!end){sumbegin;begin;}returnsum;}
  如果有个自定义类型Foo,它定义了自己的返回值类型,还有特有的初始化方式,我们可以针对它添加特化templatestructaccumulatetraitsFoo{usingtypetypenameFoo::ResultType;inlinestaticconstexprFoozerovalueFoo::Initialize(0);};
  这种声明式的(通过添加定义)无缝、透明地功能扩展方式也是STL功能扩展的一种方式,一旦你理解了其间的运作方式,会大大提升你的编程效率。这里模板参数T的关联属性通过trait(返回值类型)或policy(零值的获取方式),可以非常方便地配置、扩展accumulate函数,使之适用于各种类型。比如说这里的累和算法,也可以通过定义一个policy来定制化,缺省内置数值类型我们使用运算符,对于自定义类型,可以使用特定的累加方式。
  最后补充一点:上面traits的应用是固定的,你无法更换,我们可以将traits类型也参数化,这样在特定场合,你可以用其他的traits来替换它,只要你的traits也提供了同样的traits定义。templatetypenameT,typenameATaccumulatetraitsTautoaccumulate(constTbegin,constTend){typenameAT::typesumAT::zerovalue;while(begin!end){sumbegin;begin;}returnsum;}
  我们把traits类型定义为第二个模板参数,它有一个缺省值,就是我们之前定义好的traits类,通常你不需要关注它,除非你有特定的需求,需要替换缺省实现。看着是不是有点眼熟?是啊,STL的容器模板类里就有很多类似的应用。

地球孪生兄弟宇宙其实有第二个地球,但我们或永远也见不到随着地球环境不断恶化,人们渐渐明白了地球是人类的摇篮,而我们不能永远呆在摇篮里这句话的深意。所以在这些年间,人类不仅一直在寻找地外生命,也在寻找宜居星球,试图在时机成熟之后开展我们NASA研发新型激光器在未来可帮助宇航员寻找月球上的水来自美国宇航局戈达德太空飞行中心的工程团队开发了一块小巧却强大的激光器,在未来能够帮助宇航员寻找月球上的水。该激光器的体积比美分硬币海啸,利用量子力学效应产生太赫兹(THz)范围内售价不足万元,游戏笔记本如何选择?入手这三款赚翻了虽然现在很多人都玩手游,但是游戏笔记本依旧被某些人偏爱着。纵观目前的游戏笔记本市场,几乎很难见到售价在5000元左右的游戏本了。现在普遍都在8000元左右,不超过万元就可以买到几乎5000元预算买什么笔记本?联想小新Pro142022款换笔记本时真的很纠结,预算在5000元左右,可供选择的笔记本确实很多,挑来挑去挑花眼了,就是没有找到合适的,联想小新Pro142022款轻薄笔记本,性能强劲,颜值高,值得考虑哦。联净水器到底值不值得装?很多人都认为净水器是智商税,其实如果你选择正规的净水器就可以起到净化水质的作用,而那些被称为是智商税的净水器,大多都是价格比较便宜,质量较差的至于净水器有没有必要安装,其实是根据个生产力再次升级,三星GalaxyZFold4助力高效办公近几年移动办公成为了职场人士的高端追求,以此智能手机成为了更加便于携带和高端的移动办公设备。据了解,全新一代三星GalaxyZFold4折叠屏手机以横向折叠大屏的设计,为移动办公用世界杯故事(11)1978年阿根廷世界杯1978年还发生了哪些事呢?1月1日,中国中央电视台新闻联播第一次播出。3月23日,李小龙遗作的电影死亡游戏首映。5月1日,北京电视台更名为中央电视台,中央电视台第一套节目(CCT连番挑衅!又有8名美议员窜台!中方出招令美台深感不安据相关媒体报道,继8月份美国众议长佩洛西窜访台湾地区之后,9月7日9月9日,又有8名美国议员组团窜访台湾,并于9月8日会见了台湾当局领导人蔡英文。美国这种连番挑衅的做法实在是令人愤生如夏花灿烂,与CS75攀登平峦山当我们慢慢变长大,各自有自己的生活和家庭。不经意间,亲友之间的距离慢慢变疏远,只有过年时偶尔的一次相聚。其实很多时候是想相聚,但是有时出行很不方便。那个时候就想什么时候才能买辆车,双鱼在感情上一些不为人知的态度双鱼很敏感,他可以很明显的察觉一个人喜不喜欢自己。双鱼要的就是慢慢的熟悉了解一个人。接受不了没有自知之明自以为是的人。忍受不了对方的小气,对你没有信心热情都,会让双鱼放弃对你的喜欢戈贝尔谈欧锦赛目标是时候夺冠了欧锦赛16强开打,法国队加时8786力克土耳其晋级八强,戈贝尔11投7中20分17个篮板。赛后戈贝尔表示法国队志在夺冠我还没拿过金牌,所以这会是我的第一次,那会很棒,那是我们的目标
冰上蝴蝶再起舞,长春市第一届运动会青少年组花样滑冰比赛开赛体坛向来不缺帅哥美女,如果选择一个美女最多的体育项目,你会选择哪一个?可能大部分人心中都会有一个共同的答案花样滑冰。3月17日,由长春市体育局主办,长春体育中心承办的长春市第一届运我遇到的海棠苹果属海棠识别图鉴在新疆生活一年,却感觉有半辈子在这里了。这是个从历史文化风景到人物,都让我魂牵梦萦的地方。最直观的是美丽的风景,四月的伊犁,春光特别盛大。在新疆一切都显得大,天大地大,大山大河,大图片报帕瓦尔的经纪人来到安联看球,去留仍有悬念根据德国媒体图片报记者的报道,拜仁慕尼黑的法国国脚后卫帕瓦尔尚未对自己在今年夏天的去留做出最终决定。拜仁慕尼黑的老板们对帕瓦尔最近的表现以及他最近对待俱乐部和球迷的态度感到印象深刻为什么iPhone比安卓手机保值?四大原因让苹果成为二手市场的老大iPhone比安卓手机保值,这几乎成为了一个常识!一部未开封的安卓手机,只要经过别人的手机,沾一下指纹可能就会掉价几百块,但如果是iPhone,大概率能原价出售,或者加价出售。在一美女图片,时尚穿搭(第六集)淡粉色运动内衣,搭配高腰瑜伽裤一字肩辣妹T恤性感紧身打底上衣卡其色针织吊带裙,修身显瘦卡其色针织吊带裙,修身显瘦少女美背健身瑜伽背心,搭配瑜伽裤,魅力十足少女美背健身瑜伽背心,搭配地位难以撼动!苹果占据全球高端手机市场75份额手机中国新闻近年来,由于受到疫情和全球局势动荡等因素的影响,全球消费市场表现较为低迷,这一现象在数码领域也较为明显,包括手机电脑等在内的产品销量也开始出现下滑。而在高端手机市场,却美女图片,时尚穿搭(第五集)欧美镂空性感抹胸上衣,搭配黑色紧身长裤挂脖式性感运动内衣,搭配健身裤,跳舞,健身时尚穿搭挂脖式性感运动内衣,搭配健身裤,跳舞,健身时尚穿搭运动短袖T恤,搭配各种裤子,都能轻松驾驭运Winscok头文件的使用cwinsock是c自带的套接字头文件,在网络编程中应用很广泛,但是里面又很多命名很复杂,有点不好理解,但是和封装好的第三方库基本差不多,都是先初始化绑定监听接受具体函数,下面是一个甘肃苹果抢鲜续拓海外市场出口越南订单排至5月底图为兰州海关所属平凉海关关员查验出口鲜苹果。(资料图)刘冠华摄中新网兰州3月22日电(闫姣刘冠华刘舒蓉)据兰州海关22日披露,今年前2个月,甘肃省鲜苹果出口1。5万吨,出口额1。3999元起!华为一口气发布了10款新品,遥遥领先时间来到了今天下午的两点半,已经恢复手机业务的华为也召开了一场干货非常多的春季发布会,这次最大的主角就是两大旗舰华为MateX3华为P60,当然也包括了平板手表耳机等其他产品,十分大自然中的奇妙数学黄金分割率自从数字被发明出来以后,数学就是我们理解和描述自然的一个重要工具,从星星的图案到贝壳的螺旋,数学帮助我们更好的理解大自然的复杂和美丽。而自然界中有一个非常神秘的数学概念,几个世纪以
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网