当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++基础入门教程

C++ 高级主题之模板特化

    我们很难写出所有可能被实例化的类型都合适的模板。某些情况下,通用模板定义对于某个类型可能是完全错误的,所以我们需要能够实现处理某些特殊情况,特化的概念变是如此。compare函数和Queue类是这个问题的很好例子。因为与C风格字符串一起使用时,他们都不能正确工作。
 template <typename T>
int compare(const T &v1,const T &v2)
{
  if(v1 < v2) return -1;
  if(v2 < v1) return 1;
  return 0;
}

    如果用两个const char* 实参调用这个模板定义,函数将比较指针的值。也就是比较两个指针在内存中的相对位置,却并没有说明与指针所指数组的内容有关的任何事情。

    为了能够将compare函数用于字符串,必须提供一个知道怎样比较C风格字符串的特殊定义。这些就被称作是特化的,它对模板的用户而言是透明的。

    1. 函数模板的特化

    特化形式:

    - 关键字template后面接一对空的尖括号<>;

    - 再接模板名和一对尖括号<>,尖括号中指定这个特化定义的模板参数:

    - 函数形参表

    - 函数体
 template<>
int compare<const char*> (const char* const &v1,
     const char* const &v2)
{
  return strcmp(v1,v2);
}

 

共2页 首页 上一页 1 2 下一页 尾页 跳转到
上一篇:我的c++命名规则 下一篇:C++数组引用
相关内容
赞助商链接