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 }


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

  • 相关阅读:
    Chapter5树状数组与线段树(补充差分)(待补全两题)
    Chapter4枚举,模拟与排序
    CopyOnWriteArrayList实现原理及源码分析
    BAT大厂面试官必问的HashMap相关面试题及部分源码分析
    ArrayList、Vector、LinkedList、CopyOnWriteArrayList等详解
    java_集合知识点小结
    Fork-Join 原理深入分析(二)
    Fork-Join分治编程介绍(一)
    ForkJoin全解2:forkjoin实际工作流程与实现
    ForkJoin全解1:简单使用与大致实现原理
  • 原文地址:https://www.cnblogs.com/xiaxi/p/2372022.html
Copyright © 2011-2022 走看看