科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件与用于 C++ 的 ISO 标准保持一致模板专用化

与用于 C++ 的 ISO 标准保持一致模板专用化

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

与用于 C++ 的 ISO 标准保持一致模板专用化

作者:Kate Gregory 来源:Microsoft 开发人员网络 2007年10月28日

关键字: ISO C++ Linux

  • 评论
  • 分享微博
  • 分享邮件

模板专用化

模板通常使用一个或多个占位符(表示类或类型)定义类或函数。在编译时,生成模板的实例以匹配代码中模板的使用。例如,该模板函数可用来比较整数、浮点数,或定义 > 运算符的任何类的实例:

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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章