模板函数应用(坚持一下)

  MFC提供了一套模板库,来实现一些比较常见的数据结构如Array,List,Map。CArray即为其中的一个,用来实现动态数组的功能。CArray是从CObject派生,有两个模板参数,第一个参数就是CArray类数组元素的变量类型,后一个是函数调用时的参数类型。有一个类 class Object,要定义一个Object的动态数组,那么可以用以下两种方法:

  CArray<Object,Object> Var1;

  CArray<Object,Object&> Var2;

  //Var2的效率要高。  科普结束

 

假设我要建立2个不同类型的button

#include<afxtempl.h> class MyDialog { //.... private: CArray<CButton,CButton&> m_buttonArray; CArray<CBitmapButton,CBitmapButton&> m_bmpButtonArray; };

声明之后我们再定义一个函数 显示button

void MyDialog::ShowAllButtons(BOOL bShow) { int nIndex=0; for (nIndex=0;nIndex < m_buttonArray.GetSize();++nIndex) { m_buttonArray[nIndex].ShowWindow(bShow); } for (nIndex=0;nIndex<m_bmpButtonArray.GetSize();++nIndex) { m_bmpButtonArray[nIndex].ShowWindow(bShow); } }

 

这样写会发现重复操作比较多 我们可以再次定义一个模板函数 下面是.h文件

class MyDialog { //.... private: void ShowAllButtons(BOOL bShow); //new template function template <typename ButtonType> void ShowButtons(CArray<ButtonType,ButtonType&> &rButtonArray,BOOL bShow); private: CArray<CButton,CButton&> m_buttonArray; CArray<CBitmapButton,CBitmapButton&> m_bmpButtonArray; };

 

 定义模板函数

 

template <typename ButtonType> void CMyDialog::ShowButtons(CArray<ButtonType,ButtonType&> &rButtonArray,BOOL bShow) { for (int nIndex=0;nIndex<rButtonArray.GetSize();++nIndex) { rButtonArray[nIndex].ShowWindow(bShow); } }

这样我们可以重新定义前面的ShowAllButtons

void CMyDialog::ShowAllButtons(BOOL bShow) { ShowButtons(m_buttonArray,bShow); ShowButtons(m_bmpButtonArray,bShow); }  

这样看起来简单很多了

编译器会自动匹配类型

ShowButtons<CButton>(m_buttonArray,bShow); ShowButtons<CBitmapButton>(m_bmpButtonArray,bShow);

你可能感兴趣的:(模板函数应用(坚持一下))