C++/CLR泛型与C++模板之间的对比
作者 佚名技术
来源 程序设计
浏览
发布时间 2012-06-30
式。例如,你可能希望为堆栈类提供第三个参数,这个参数指明遇到特定条件的时候使用的回调处理程序。明智地使用typedef可以大幅度简化那些表面上看起来很复杂的声明,如下所示:
当然,你可以为处理程序提供默认值--在这个例子中,是一个已有的方法的地址。例如,下面的缓冲区声明就提供了大小和处理程序:
由于默认值的位置次序优先于命名次序,因此如果不提供明确的大小值(即使这个大小与默认值是重复的),就无法提供重载的处理程序的。下面就是可能用到的修改堆栈的方法:
模板支持的第二种额外的参数就是template模板参数--也就是这个模板参数本身表现为一个模板。例如:
Editor模板类列出了两个模板参数arena和arenaType。ArenaType是一个模板类型参数;你可以传递整型、字符串型、自定义类型等等。Arena是一个template模板参数。带有单个模板类型参数的任何模板类都可以绑定到arena。m_arena是一个绑定到arenaType模板类型参数的模板类实例。例如:
如果你把参数化类型简单地作为存储和检索元素的容器,那么你可以略过这一部分了。当你需要调用某个类型参数(例如在比较两个对象,查看它们相等或者其中一个小于另一个的时候,或者通过类型参数调用方法名称或嵌套类型的时候)上的操作的时候,才会考虑约束的问题。例如:
这段代码成功地声明了aObj,它同时还约束了能够成功地绑定到你的类模板的类型参数。例如,如果你编写下面的代码,aObj的声明就是非法的(在这种特定的情况下),编译器会报错误信息:
当然,其特定的约束是,这个类型参数必须包含一个叫做A的类型的嵌套声明。如果它的名字叫做B、C或Z都没有关系。更普通的约束是类型参数必须表示一个类,否则就不允许使用T::范围操作符。我使用int类型参数同时违反了这两条约束。例如,Visual C++编译器会生成下面的错误信息: error C2825: ''T'': must be a class or namespace when followed by ''::'' C++模板机 |
|||||||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: C++语言基础-字符数组下一篇: C++语言基础-字串操作函数
关于C++/CLR泛型与C++模板之间的对比的所有评论