欢迎来到代码驿站!

C代码

当前位置:首页 > 软件编程 > C代码

如何C++使用模板特化功能

时间:2022-10-28 09:53:46|栏目:C代码|点击:

前言:

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

然而,不管是类模板还是函数模板,对所有的类型都是采用相同的处理方式(同一份代码)。为此,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");
}

上一篇:CFileDialog设置多选的问题解决

栏    目:C代码

下一篇:详解C++ 引用

本文标题:如何C++使用模板特化功能

本文地址:http://www.codeinn.net/misctech/217523.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有