亲宝软件园·资讯

展开

C++模板特化功能

机器学习入坑者 人气:0

前言:

通过定义模板,使得函数或者类不依赖于特定的类型,这样大幅提升了代码的复用性。

然而,不管是类模板还是函数模板,对所有的类型都是采用相同的处理方式(同一份代码)。为此,C++提出了“模板特化的概念”,对特定类型提供模板的改造。

比如,对于函数模板来说,可以通过特化指定特定的类型,针对此特定类型对函数体内容进行重写,使得函数对特定类型实现特定功能。

注意:

按照语法,对函数模板和类模板进行特化后,就变为普通函数和普通的类,而不再是模板。

1、函数模板的特化

对于函数模板来说,其特化语法如下:

template <>
返回类型 已定义的函数模板名<具体类型>(参数表){
    针对特定类型的具体实现;
}

其中“template <>”是特化的固定格式。下面的例子定义了函数模板play(),并对此模板进行特化,特化过程中指定具体类型为“int”:

// 已定义好的函数模板
template <class Q>
void play(Q p) {
    printf("play with Q! \n");
}

// 对以定义好的函数模板play()进行特化
template <> 
void play<int>(int) {
    printf("play with int! \n");
}

2、类模板的特化

类模板进行特化的语法如下:

template <>
class 类模板名<具体类型>{
    类定义;
}

类模板的成员函数在类外实现时,语法如下:

返回类型 类模板名<具体类型>::函数名{
    函数体;
}

下面是对类模板Duck进行特化的代码,特化过程中指定了类型为"int":

template <class T>
class Duck {
public:
    void run() { printf("T run! \n"); }
};

// 对类模板Duck进行特化
template <>
class Duck<int> {
public:
    void run();
};
// 成员函数在模板类以外实现
void Duck<int>::run() {
    printf("int run! \n");
}

加载全部内容

相关教程
猜你喜欢
用户评论