数组---这个C语言中的怪物,自从被直接继承到C++中,无数有识之士们前赴后继、绞尽脑汁的试图寻找一种能够动态增加的替代数据类型。固然,最著名的,应该就是vector向量。可是,它也仍是浑身绿毛,迭代的出现,几乎完全的摧毁了它仅存的一点优势。因此,引入MFC以后,微软斩钉截铁的抛弃了标准C++的模板库。 数组
CArray是MFC中很是重要的几个类模板之一,其余还有CList、CMap,他们的定义略微有点晦涩,CArray声明以下: 函数
template<class TYPE, class ARG_TYPE> 继承
class CArray : public CObject element
从中,咱们能够看出来,CArray是继承自CObject,应该属于MFC的体系,看这2个参数: 原型
TYPE:这是一个用来返回的类型,通常来讲,它应该和ARG_TYPE一致,但不绝对。 源码
ARG_TYPE:相对于TYPE,它是用来传入的,ARG,我想应该是argument(参数)的意思。 模板
如何来理解这两个参数呢? class
举个简单的例子吧,定义一个以CString为元素的动态数组: List
tpyedef CArray<CString, CString&> CArrStr; 数据类型
如今,咱们构造了一个以CString为元素的动态数组,你能够用Add函数来添加一个函数,也能够用GetAt函数来得到一个元素。这恰好是两个几乎相反的操做,Add函数的原型是:
int Add(ARG_TYPE newElement);
咱们用CString&替换ARG_TYPE以后,就能够获得以下的实现:
int Add(CString& newelement);
原来是这样啊,彻底符合咱们的平常习惯。再来看看GetAt函数的原型:
TYPE GetAt(int nIndex) const;
一样,咱们替换TYPE以后,获得的是:
CString GetAt(int nIndex) const;
很简单,很是容易理解。若是你有兴趣去查看CArray的源码的话,你会发现全部的入参—也就是向CArray提供的参数,都是ARG_TPYE,而全部的由CArray返回的类型都是TYPE,那么咱们如今,应该很是清楚CArray参数使用方法了,它一样适合于其余的类模板。