數組---這個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參數使用方法了,它一樣適合於其餘的類模板。