C++ template用法案例详解

 更新时间:2021年09月07日 09:45:02   作者:keneyr  
这篇文章主要介绍了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用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解C++中vector的理解以及模拟实现

    详解C++中vector的理解以及模拟实现

    vector是表示可变大小数组的序列容器。这篇文章主要为大家详细介绍了vector的理解以及模拟实现,文中的示例代码讲解详细,感兴趣的可以了解一下
    2023-03-03
  • C++实现的大数相乘算法示例

    C++实现的大数相乘算法示例

    这篇文章主要介绍了C++实现的大数相乘算法,结合实例形式分析了C++大数相乘的概念、原理及代码实现技巧,需要的朋友可以参考下
    2017-08-08
  • c++制作的时间函数类

    c++制作的时间函数类

    本文给大家分享的是一个个人使用C++编写的时间函数类,主要是实现了类的定义和调用,相比较来说还算比较复杂的时间类了,推荐给小伙伴们,有需要的朋友可以参考下。
    2015-03-03
  • C++实现图的邻接矩阵存储和广度、深度优先遍历实例分析

    C++实现图的邻接矩阵存储和广度、深度优先遍历实例分析

    这篇文章主要介绍了C++实现图的邻接矩阵存储和广度、深度优先遍历,实例分析了C++实现图的遍历技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • C++引用的使用与const修饰符

    C++引用的使用与const修饰符

    这篇文章介绍了C++引用使用与const修饰符,引用是给已经定义的变量一个别名,可以简单理解成同一个变量的昵称,既然是昵称或者是别名,显然它和原本的变量名有着同样的效力,所以我们对别名进行修改,原本的变量值也一样会发生变化,下面来看看详细内容,需要的朋友可以参考下
    2021-11-11
  • vscode分享代码插件Polacode介绍

    vscode分享代码插件Polacode介绍

    这篇文章主要介绍了vscode分享代码插件Polacode的相关知识,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • 详解Matlab绘制3D玫瑰花的方法(内附旋转版本)

    详解Matlab绘制3D玫瑰花的方法(内附旋转版本)

    这篇文章主要为大家介绍了如何利用Matlab绘制3D版的玫瑰花以及旋转版的3D玫瑰花,文中的示例代码讲解详细,感兴趣的小伙伴可以动手试一试
    2022-03-03
  • C语言实现解析csv格式文件的示例代码

    C语言实现解析csv格式文件的示例代码

    CSV,有时也称为字符分隔值,其文件以纯文本形式存储表格数据(数字和文本),本文为大家整理了C语言解析csv文件的方法,需要的可以参考一下
    2023-06-06
  • C语言指针入门的简单实例教程

    C语言指针入门的简单实例教程

    这篇文章主要给大家介绍了关于C语言指针入门的简单实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • C++中delete函数的具体使用

    C++中delete函数的具体使用

    本文主要介绍了C++中delete函数的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03

最新评论