- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C模版使用技巧IntType
C++模版使用技巧--Int2Type
一? Int2Type
平常我们所看到的int是一个类型,例如1,2,3...等属于int。 但是这里说的是通过模版使每一个int类型变量都当成是不同的类型。
二 C++模版的迟绑定
这个名字是我起的,因为不知道正式的称呼是什么,意思是说在使用C++的模版的时候,只有在你的代码里面调用了某个模版方法,在编译的时候才会产生对应的方法,也即编译后的代码中不包含我们没有使用的模版方法。看下面的实例是可以编译运行的:
class?X?{
public:
?void?f()?{}
};
class?Y?{
public:
?void?g()?{}
};
template?typename?T?class?Z?{
??T?t;
public:
??void?a()?{?t.f();?}
??void?b()?{?t.g();?}
};
int?main()?{
??ZX?zx;
??zx.a();?//?Doesnt?create?ZX::b()
??ZY?zy;
??zy.b();?//?Doesnt?create?ZY::a()
}?/**////:~
三 问题
template?typename?T,?bool?isPolymorphic
class?NiftyContainer
{???
???void?DoSomething()
???{
??????T*?pSomeObj?=?new T();
??????if?(isPolymorphic)
??????{
?????????T*?pNewObj?=?pSomeObj-Clone();
??????}
??????else
??????{
?????????T*?pNewObj?=?new?T(*pSomeObj);
??????}
???}
};
class?Test
{
public:
????Test(){};
};
void?main()
{
????NiftyContainerTest,true?test;
????//test.DoSomething();?//?这里通不过编译
????
}
大家也许会说上面的方法代码没有问题,我说,有问题,仔细看一开始的代码和我的说明,我说的是只要我们的代码里面用到模版方法就会被编译为目标代码,而不是说在代码运行的时候使用到的代码才会被编译为目标代码,好的,搞清楚了这个就可以知道上面的实例为什么通不过编译了。
四 Int2Type
下面正式进入主题Int2Type的作用和使用,上面的实例,我们传入的T类型中只有clone或public构造函数中的一个,我们想根据bool值来选择使用clone或new,但是上面的代码有问题,编译都不过偶,下面使用Int2Type来实现:
template?int?vstruct?Int2Type
{
?enum?{?value?=?v?};
};
template?typename?T,?bool?isPolymorphicclass?NiftyContainer
{
private:
void?DoSomething(T*?pObj,?Int2Typetrue)
{
??????T*?pNewObj?=?pObj-Clone();
}
?void?DoSomething(T*?pObj,?Int2Typefalse)
{
??????T*?pNewObj?=?new?T(*pObj);
?????}
public:
???void?DoSomething(T*?pObj)
???{
??????DoSomething(pObj,?Int2TypeisPolymorphic());
???}
};
class?Test
{
public:
????Test(){};
};
void?main()
{
????NiftyContainerTest,false?test;?//如果用ture不会通过编译
????Test*?t?=?new?Test();
????test.DoSomething(t);
}
看了上面的代码,我不禁要再次的赞叹《C++设计新思维》的作者,高!
您可能关注的文档
最近下载
- 保险学结课论文.docx VIP
- 2025四川广安安辑项目管理有限公司第二批次招聘劳动合同工5人笔试参考题库附答案解析.docx VIP
- 呆呆鲨可爱卡通风AI应用科普模版.pptx VIP
- 中考数学复习重难题型真题再现及题型预测(全国通用)专题01简单计算题(实数混合计算、整式分式化简、解分式方程、解不等式及方程)(原卷版+解析).docx VIP
- 实验室废物处理培训.pptx VIP
- 2025四川广安安辑项目管理有限公司第二批次招聘劳动合同工5人笔试备考题库及答案解析.docx VIP
- 劳力士培训课件.ppt VIP
- 医学大数据分析与挖掘方法及应用研究综述.pptx VIP
- 第一视角与第三视角.ppt VIP
- 窗口人员劳务派遣投标方案模板(345).doc VIP
原创力文档


文档评论(0)