CArray的参数如何使用,TYPE与ARG_TYPE的解释
2010-04-20 16:39
344 查看
From: http://hi.baidu.com/idealsoft/blog/item/609a6509552753216b60fbb4.html
前一篇,我已经对大家粗浅的解释了CArray的用法,现在,再详细的给大家说说CArray的参数问题。
数组---这个C语言中的怪物,自从被直接继承到C++中,无数有识之士们前赴后继、绞尽脑汁的试图寻找一种可以动态增长的替代数据类型。当然,最著名的,应该就是vector向量。但是,它也还是浑身绿毛,迭代的出现,几乎彻底的摧毁了它仅存的一点优点。所以,引入MFC之后,微软斩钉截铁的抛弃了标准C++的模板库。
CArray是MFC中非常重要的几个类模板之一,其他还有CList、CMap,他们的定义略微有点晦涩,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的效率问题。
前一篇,我已经对大家粗浅的解释了CArray的用法,现在,再详细的给大家说说CArray的参数问题。
数组---这个C语言中的怪物,自从被直接继承到C++中,无数有识之士们前赴后继、绞尽脑汁的试图寻找一种可以动态增长的替代数据类型。当然,最著名的,应该就是vector向量。但是,它也还是浑身绿毛,迭代的出现,几乎彻底的摧毁了它仅存的一点优点。所以,引入MFC之后,微软斩钉截铁的抛弃了标准C++的模板库。
CArray是MFC中非常重要的几个类模板之一,其他还有CList、CMap,他们的定义略微有点晦涩,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的效率问题。
相关文章推荐
- CArray的参数如何使用,TYPE与ARG_TYPE的解释
- Seoquake参数解释和如何使用
- vi 中如何使用 :s 命令实现字串的替换以及对参数分隔符解释
- android Studio 使用gradle 参数解释及多渠道打包
- 如何使用setInterval执行带有参数的函数
- 基于jQuery的GridView-FlexiGrid的使用和改造(1)--如何使用,完全参数说明
- C语言中如何使用宏 包括单双井号 可变参数
- JAVA 如何传递 pl/sql中 ROWTYPE类型参数
- android 如何正确使用 泛型 和 多参数 “偷懒”
- C++ - 非类型模板参数(nontype template parameters) 使用 及 代码
- 使用Nginx后如何在web应用中获取用户ip及原理解释
- 使用nginx后如何在web应用中获取用户ip及原理解释
- 使用润乾参数模板后如何对参数进行二次处理
- 理解可变参数va_list、va_start、va_arg、va_end原理及使用方法
- 如何获取函数的可变参数(va_list, va_start, va_arg, va_end)
- Switch case 参数如何能使用string
- Oracle PL/SQL中如何使用%TYPE和%ROWTYPE
- 分享如何使用PHP将URL地址参数进行加密传输提高网站安全性
- 使用nginx后如何在web应用中获取用户ip及原理解释
- PowerShell 调用系统 DLL 中的函数,如何使用返回参数中的值