CArray的参数如何使用,TYPE与ARG_TYPE的解释

来源:互联网 发布:口才 知乎 编辑:程序博客网 时间:2024/05/19 12:37

From: http://hi.baidu.com/idealsoft/blog/item/609a6509552753216b60fbb4.html

 

 

前一篇,我已经对大家粗浅的解释了CArray的用法,现在,再详细的给大家说说CArray的参数问题。

数组---这个C语言中的怪物,自从被直接继承到C++中,无数有识之士们前赴后继、绞尽脑汁的试图寻找一种可以动态增长的替代数据类型。当然,最著名的,应该就是vector向量。但是,它也还是浑身绿毛,迭代的出现,几乎彻底的摧毁了它仅存的一点优点。所以,引入MFC之后,微软斩钉截铁的抛弃了标准C++的模板库。

    CArrayMFC中非常重要的几个类模板之一,其他还有CListCMap,他们的定义略微有点晦涩,CArray声明如下:

template<class TYPE, class ARG_TYPE>

class CArray : public CObject

从中,我们可以看出来,CArray是继承自CObject,应该属于MFC的体系,看这2个参数:

TYPE:这是一个用来返回的类型,一般来说,它应该和ARG_TYPE一致,但不绝对。

ARG_TYPE:相对于TYPE,它是用来传入的,ARG,我想应该是argument(参数)的意思。

如何来理解这两个参数呢?

举个简单的例子吧,定义一个以CString为元素的动态数组:

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参数使用方法了,它同样适合于其他的类模板。

    别走开,下面,我们将讨论CArray的效率问题。

原创粉丝点击