函数模板的特化

函数模板的特化

该定义中一个或多个模板形参的实际类型或实际值是指定的。特化形式如下:

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

再接模板名和一对尖括号,及括号中指定这个特化定义的模板形参;

函数形参表

函数体

template<>

int compare<const char *>(const char *const &v1, const char *const &v2)

{

     return strcmp(v1, v2);

}

特化的声明必须与对应的模板相匹配。

当调用compare函数的时候,传给它两个字符指针,编译器将调用特化版本。编译器将为任意其他实参类型调用泛型版本。

const char *cp1 = "world", *cp2 = "hi";

int i1, i2;

compare(cp1, cp2);//调用特化版本

compare(i1,i2)//调用的版本type为int

template <typename T>

int compare(const T
&v1, const T &v2)

{

if (v1 < v2)

{

return -1;

}

if (v2 < v1)

{

return 1;

}

return 0;

}

template<>

int compare<const char *>( const char * const &v1, const char * const &v2)

{

return strcmp(v1, v2);

}

int _tmain(int argc,
_TCHAR* argv[])

{

const char *cp1
= "world", *cp2 = "hi";

int i1 = 2, i2 = 1;

int ret1, ret2;

ret1 = compare(cp1, cp2);

ret2 = compare(i1, i2);

printf( "ret 1  is %d, ret2 is %d\r\n" , ret1, ret2);

return 0;

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-22 04:27:27

函数模板的特化的相关文章

类模板和函数模板

函数模板: 函数模板全特化:所谓特化,是指相对普通模板的特化,是另外一个模板.但不是实例,只是模板 template <class T>                                      //普通函数模板,泛型T mymax(const T t1, const T t2){   return t1 < t2 ? t2 : t1;} template <>const char* mymax(const char* t1,const char* t2)  

Effective c++--智能指针 &amp; 函数模板

Shared_ptr允许当智能指针被建立起来是指定一个资源释放函数绑定于智能指针身上,也就是说在shared_ptr被初始化的同时也可以指定其管理的资源的释放函数.Shared_ptr提供的某个构造函数接受两个实参:一个是被管理的指针,另一个是引用次数变为0时将被调用的"删除器".Shared_ptr构造函数坚持其第一个参数必须是个指针.它支持定制型删除器. 缺省情况下C++以by value方式传递对象至函数,这种情况下函数参数都是以实际参数的副本为初值,而调用端获得的也是函数返回值

[转]C++中模板的特化与偏特化

转载自:http://hi.baidu.com/klcdyx2008/blog/item/5adbf77b79f316f90bd1873c.html 1.引言C++中的模板分为类模板和函数模板,虽然它引进到C++标准中的时间不是很长,但是却得到了广泛的应用,这一点在STL中有着充分的体现.目前,STL在C++社区中得到了广泛的关注.应用和研究.理解和掌握模板是学习.应用和研究以及扩充STL的基础.而STL模板实例中又充斥着大量的模板特化和偏特化. 2.模板的定义(1) 类模板定义一个栈的类模板,

C++—模板(2)类模板与其特化

我们以顺序表为例来说明,普通顺序表的定义如下: 1 typedef int DataType; 2 //typedef char DataType; 3 class SeqList 4 { 5 private : 6 DataType* _data ; 7 int _size ; 8 int _capacity ; 9 } ; 模板类也是模板, 必须以 关键字templ ate开头, 后接模板形参表. 模板类一般格式如下:template<class 形参名 1, class 形参名 2, .

模板的特化

提起模板,那我们有必要先了解一下泛型编程. 泛型编程:编写与类型无关的逻辑代码,是代码复用的一种手段.模板是泛型编程的基础. 模板又分为:类模板和函数模板. 首先看类模板的特化: 类模板的特化分为:全特化和部分特化.下面举例说明: #include<iostream> using namespace std; template <typename T1,typename T2> class Data { public: Data() {         cout << 

C++泛型编程之函数模板

泛型语义 泛型(Generic Programming),即是指具有在多种数据类型上皆可操作的含意.泛型编程的代表作品 STL 是一种高效.泛型.可交互操作的软件组件. 泛型编程最初诞生于 C++中,目的是为了实现 C++的 STL(标准模板库).其语言支持机制就是模板(Templates). 模板的精神其实很简单:类型参数化(type parameterized),即,类型也是一种参数,也是一种静多态. 换句话说, 把一个原本特定于某个类型的算法或类当中的类型信息抽掉,抽出来做成模板参数. 函

C++解析(26):函数模板与类模板

0.目录 1.函数模板 1.1 函数模板与泛型编程 1.2 多参数函数模板 1.3 函数重载遇上函数模板 2.类模板 2.1 类模板 2.2 多参数类模板与特化 2.3 特化的深度分析 3.小结 1.函数模板 1.1 函数模板与泛型编程 C++中有几种交换变量的方法? 交换变量的方法--定义宏代码块 vs 定义函数: 定义宏代码块 优点:代码复用,适合所有的类型 缺点:编译器不知道宏的存在,缺少类型检查 定义函数 优点:真正的函数调用,编译器对类型进行检查 缺点:根据类型重复定义函数,无法代码复

类模板 及其 特化

(1) // -------------类模板 体验--------------------template <typename T1, typename T2>class Test //原始的类模板后 加上class Test<T1, T2>会报错{public: void add(T1 a, T1 b) { cout << "void add(T1 a, T1 b)" << endl; cout << "a +

函数模板特化

#include <iostream> template <typename T> T max(T x, T y) { return x > y ? x : y; } //函数模板特化 template <> const char* max(const char* x, const char* y){ return strcmp(x, y) > 0 ? x : y; } int main(){ std::cout << max(1, 2); st