zoukankan      html  css  js  c++  java
  • C++ Template简介

    C++ Template是一个广泛使用的功能。通过使用C++ Template,我们可以通过相同的逻辑去处理不同的类型数据。Template同样也是一种高度代码重用的方式。你可能没有亲自写过一个模板的代码,但是你可能已经体验过他的威力。因为我们经常使用的STL就是通过模板来实现的。我们常用的一些容器类,比如vector, set之类的,都是通过一套代码,来实现了对各种数据类型的支持。这些数据类型除了系统本身支持的,比如int, char之类的,同样也包括你自己定义的数据类型。所以说,你应该非常熟练的掌握这个功能。

     在C++里,Template主要通过两种方式应用:

    • 模板函数
    • 模板类

     模板函数很好理解。下面的代码显示了如何定义一个模板函数,以及如何去使用它。你如果仔细观察下面的例子的话就会发现,在模板函数的调用上,和其他普通函数没有任何区别。只不过你需要在定义的时候,需要定义一个template<class T>。 这里的T就是你即将调用的数据类型。

     1 #include "stdafx.h"
    2 #include <iostream>
    3
    4 template<class T>
    5 T Add(T a, T b)
    6 {
    7 return a + b;
    8 }
    9
    10 int _tmain(int argc, _TCHAR* argv[])
    11 {
    12 std::cout<<Add(1, 2)<<std::endl;
    13
    14 std::cout<<Add(1.2, 2.2)<<std::endl;
    15
    16 return 0;
    17 }



     模板类的定义和普通的类有些区别。和模板函数类似,你需要在开头定义一个T。

     1 template<class T>
    2 class AutoPtr
    3 {
    4 public:
    5 explicit AutoPtr(T * p):m_pointer(p){}
    6 ~AutoPtr(){ delete m_pointer;}
    7 private:
    8 T * m_pointer;
    9 };
    10
    11 int _tmain(int argc, _TCHAR* argv[])
    12 {
    13 int * p = new int[20];
    14 AutoPtr<int> pAutoPtr(p);
    15
    16 return 0;
    17 }



     对于模板类,还有另外一种定义方法。你可以定义成员函数作为模板函数,而类不需要是模板类。

     1 class Math
    2 {
    3 public:
    4 template<class T>
    5 T Add(T a, T b) {return a+b;}
    6 };
    7
    8 int _tmain(int argc, _TCHAR* argv[])
    9 {
    10 Math math;
    11 std::cout<<math.Add(1, 2)<<std::endl;
    12
    13 return 0;
    14 }


    通过上面三个例子,我们了解了模板的两种用法。这样,在我们以后的代码生涯中,我们又多了一件武器。

  • 相关阅读:
    给定一个排序数组,你需要在原地删除重复出现的元素
    OSPF-外部路由
    虚链路
    OSPF域间路由计算,防环
    转 C# 只允许运行一个实例
    转 点击关闭时最小化到任务栏
    C#,int转成string,string转成int
    SQL 查找表名 字段名
    C# *= 运算顺序
    SQL 批量删除表
  • 原文地址:https://www.cnblogs.com/xiaxi/p/2372022.html
Copyright © 2011-2022 走看看