扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
模板通常使用一个或多个占位符(表示类或类型)定义类或函数。在编译时,生成模板的实例以匹配代码中模板的使用。例如,该模板函数可用来比较整数、浮点数,或定义 > 运算符的任何类的实例:
template T biggest(T a, T b) { if (a > b) return a; return b; }
您可以使用该模板,如下所示:
int x = biggest(3,4); double d = biggest(4.1, -2.3); // SalesRep instances created elsewhere, // operator> defined for SalesRep class SalesRep bestseller = biggest(John, Jane);
编译器将产生 biggest(int,int)、biggest(double, double) 和 biggest(SalesRep, SalesRep) 的代码,该代码将连接到可执行文件。
C++ 程序员通常在遇到需要处理字符串的模板时会面临麻烦。传统的 char* 字符串不能用 > 和 < (这些运算符只能比较指针值,而不能比较他们所指向的字符串)进行比较,或者像数值或对象那样用 = 进行复制。一种解决办法是编写专用化 —特定类型的一个实例,编译器将使用该实例而不是更通用的模板。以下是 biggest() 的 char* 类型的专用化:
template<> const char* biggest(const char* a, const char* b) { if (strcmp(a,b) > 0) return a; return b; }
Visual C++ 一直以来都能够处理模板专用化。2003 版中新增的功能是处理局部 模板专用化。这适用于采用两个占位符类型的模板,而不适用于只采用一个占位符类型的模板,如 biggest()。
查看本文来源如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者