我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C++ template用法案例详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C++ template用法案例详解

有必要记一下这种一眼看上去就很高级的用法。还是编程不够多。都没用过这个。

相信用过c++的人,即便没用过,也肯定都听说过模板类这个词。嗨不巧了,今天讲的就是模板类。

模板是c++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。因此可以说,模板是一种对类型进行参数化的工具

template<class T>  和  template<typename T> 都可以用来定义函数模板类模板,在使用上,他们俩没有本质的区别。

函数模板针对仅参数类型不同的函数;类模板针对仅数据成员和成员函数类型不同的类。

Note:模板的声明或定义只能在全局,命名空间或类范围内进行。不能再局部范围,函数内进行。

一、函数模板

template< class 形参名,class 形参名,......> 返回类型 函数名(参数列表)   { 函数体 }

举个例子:template <class T> void swap(T& a,T& b){}

当调用这样的模板函数时,类型T就会被调用时的类型所代替。如果swap(a, b),a,b都是int类型,那么模板函数swap中的形参T就会被int所代替,模板函数就会变成swap(int &a,int &b)。而当swap(a,b),a,b都是double类型,那么模板函数swap中的形参T就会被double所代替,模板函数就会变成swap(double &a,double &b),这样如果我们的程序中交换变量的值就不再受限于类型了。

二、类模板

template< class 形参名,class 形参名,......> class 类名 {...};

举个例子:template <class T> class A { public:   T a; T b;   T hy(T c, T &d); };

在类A中声明了两个类型为T的成员变量a和b,还声明了一个返回类型为T带两个参数类型为T的函数hy。

不讲太难的,恩太难的我也不会啊。就写个简单的例子把,对我足够了:

TemplateDemo.h


#ifndef TEMPLATE_DEMO_HXX
#define TEMPLATE_DEMO_HXX 
 
template<class T> class A{
     public:
         T g(T a,T b);
         A();
 };
 
#endif

TemplateDemo.cpp


#include<iostream.h>
#include "TemplateDemo.h" 
template<class T> A<T>::A(){}
 
template<class T> T A<T>::g(T a,T b){
     return a+b;
}
 
void main(){
     A<int> a;
     cout<<a.g(2,3.2)<<endl;

-----------------------------------------------------------------以下可不看-----------------------------------------

现在再看的Kinect的那个代码:

stdafx.h


template<class Interface>
 
inline void SafeRelease(Interface *& pInterfaceToRelease)
{
    if (pInterfaceToRelease != NULL)
    {
        pInterfaceToRelease->Release();
        pInterfaceToRelease = NULL;
    }
}

很显然是声明了函数模板,Interface是一种自定义的类型:

BodyBasics.cpp


#include "stdafx.h"
 
...
 
CBodyBasics::~CBodyBasics()
{
    DiscardDirect2DResources();
 
    // clean up Direct2D
    SafeRelease(m_pD2DFactory);
 
    // done with body frame reader
    SafeRelease(m_pBodyFrameReader);
 
    // done with coordinate mapper
    SafeRelease(m_pCoordinateMapper);
 
    // close the Kinect Sensor
    if (m_pKinectSensor)
    {
        m_pKinectSensor->Close();
    }
 
    SafeRelease(m_pKinectSensor);
}

很显然ID2D1Factory是一个接口。

-----------------------------------------END-------------------------------------------------

参考博客:https://www.cnblogs.com/yuzhuwei/p/4171070.html

                 https://blog.csdn.net/biu__biu_biu/article/details/78020620

到此这篇关于C++ template用法案例详解的文章就介绍到这了,更多相关C++ template用法内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C++ template用法案例详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录