建議使用 Visual Studio 2017

樣板架構類別

 

如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件

本文說明 MFC 3.0 版的型別安全樣板架構集合類別和之後。 使用這些範本建立型別安全集合較為方便,並說明比使用以範本無法更有效地提供型別安全集合類別。

MFC 預先定義樣板架構集合兩個分類:

簡單的集合類別都是從類別衍生自 CObject,,因此繼承序列化、動態建立 CObject和其他屬性。 具型別指標集合類別要求您指定衍生自—必須是 MFC 預先定義的其中一個非樣板指標集合,例如 CPtrListCPtrArray的類別。 您的新集合類別從指定的基底類別和新類別的成員函式使用封裝呼叫繼承的基底類別成員強制實施型別安全。

如需 C++ 樣板的詳細資訊,請參閱《 C++ 語言參考》中的範本

若要使用簡單的集合範本,您需要知道要使用何種資料在這些集合可以儲存,以及參數中的宣告集合。

簡單的陣列和清單使用方式

簡單的陣列和清單類別, CArrayCList,並採用兩個參數: 型別ARG_TYPE。 這些類別可以儲存任何資料型別,您可以在 型別 參數指定:

  • 基本 C++ 資料型別,例如 intcharfloat

  • C++ 結構和類別

  • 您定義的其他型別。

為了方便和效率,您可以使用 ARG_TYPE 參數指定函式引數的型別。 通常,您會為您在 型別 參數命名的型別的參考指定 ARG_TYPE 。 例如:

         CArray<int, int> myArray;
         CList<CPerson, CPerson&> myList;

第一個範例會宣告陣列, myArray集合,包含 int。 第二個範例宣告清單集合,則為 myList,儲存 CPerson 物件。 集合類別的某些成員函式採用型別由 ARG_TYPE 樣板參數指定的引數。 例如,類別的 CArrayAdd 成員函式採用 ARG_TYPE 引數:

         CArray<CPerson, CPerson&> personArr;
         CPerson person;
         personArr.Add(person);

簡單的導覽使用方式

簡單的對應類別, CMap,接受四個參數: KEYARG_KEY,以及 ARG_VALUE。 類似陣列和清單類別,對應類別可以儲存任何資料型別。 不同於陣列和清單,索引和訂單資料儲存,對應組合索引鍵和值:您在對應中的值會透過指定的值相關聯的索引鍵。 機碼參數指定使用的索引鍵資料型別存取對應中儲存的資料。 如果 KEY 的 型別為結構或類別, ARG_KEY 參數通常是 KEY指定之型別的參考。 參數會指定在對應中的項目型別。 如果 ARG_VALUE 的型別為結構或類別, ARG_VALUE 參數通常是對 所指定之型別的參考。 例如:

         CMap< int, int, MY_STRUCT, MY_STRUCT& > myMap1;
         CMap< CString, LPCTSTR, CPerson, CPerson& > myMap2;

第一個範例儲存 MY_STRUCT 值,由 int 索引鍵存取它們,並以傳址方式傳回存取的 MY_STRUCT 項目。 第二個範例儲存 CPerson 值,由 CString 索引鍵存取以及存取的項目會傳回參考。 這個範例也可能表示簡單的通訊錄,您依照姓氏搜尋人。

由於金鑰參數屬於型別 CString ,並 KEY_TYPE 參數屬於型別 LPCSTR,索引鍵對應於函式儲存為型別 CString 項目,但是參考 (例如 SetAt 透過 LPCSTR型別指標。 例如:

         CMap< CString, LPCTSTR, CPerson, CPerson& > myMap;
         CPerson person;
         LPCTSTR lpstrName = _T("Jones");
         myMap.SetAt(lpstrName, person);

若要使用輸入指標集合範本,您需要知道要使用何種資料在這些集合可以儲存,以及參數中的宣告集合。

輸入指標陣列和清單使用方式

輸入指標陣列和清單類別, CTypedPtrArrayCTypedPtrList,並採用兩個參數: BASE_CLASS型別。 這些類別可以儲存任何資料型別,您可以在 型別 參數指定。 這些項目會儲存指標的其中一個非樣板集合類別衍生;您可以在 BASE_CLASS指定基底類別。 對於陣列,請使用 CObArrayCPtrArray。 如需清單,請使用 CObListCPtrList

實際上,在中,當您宣告集合以時, CObList假設,新類別不僅會繼承其基底類別的成員,不過,它也宣告的 Automation 其他型別安全成員函式和運算子可封裝呼叫提供型別安全給基底類別成員。 這些套件會處理所有必要的型別轉換。 例如:

         CTypedPtrArray<CObArray, CPerson*> myArray;
         CTypedPtrList<CPtrList, MY_STRUCT*> myList;

第一個範例宣告輸入指標陣列,則為 myArray,衍生自 CObArray。 陣列來儲存並傳回指標至 CPerson 物件 (其中 CPerson 是衍生自 CObject的類別)。 您可以呼叫任何 CObArray 成員函式,或者呼叫新的型別安全的 GetAtElementAt 函式或使用型別安全 [] 運算子。

第二個範例宣告輸入指標清單,則為 myList,衍生自 CPtrList。 清單中儲存並將指標傳回 MY_STRUCT 物件。 根據 CPtrList 的類別會儲存從 CObject無法取得的物件之指標使用。 CTypedPtrList 有一些型別安全成員函式: GetHeadGetTailRemoveHeadRemoveTailGetNextGetPrevGetAt

輸入指標對應使用方式

輸入指標對應類別, CTypedPtrMap,採用三個參數: BASE_CLASSKEYBASE_CLASS 參數指定衍生新類別的類別: CMapPtrToWordCMapPtrToPtrCMapStringToPtrCMapWordToPtrCMapStringToOb,依此類推。 KEY 類似於 CMap型別:它指定搜尋中使用的金鑰類型。 是類似 CMap:它會指定在對應儲存物件的型別。 例如:

         CTypedPtrMap<CMapPtrToPtr, CString, MY_STRUCT*> myPtrMap;
         CTypedPtrMap<CMapStringToOb, CString, CPerson*> myPersonMap;

第一個範例是根據 CMapPtrToPt的對應 r —它使用 CString 索引鍵對應至 MY_STRUCT的指標。 您可以呼叫型別安全的 Lookup 成員函式搜尋儲存的指標。 您可以使用 [] 運算子搜尋儲存的指標和加入,如果找不到。 請改用型別安全的 GetNextAssoc 函式,您可以逐一查看對應。 您也可以呼叫類別 CMapPtrToPtr的其他成員函式。

第二個範例是根據 CMapStringToO的對應 b —它使用字串索引鍵對應至預存指標到 CMyObject 物件。 您可以使用前面段落中所描述的相同型別安全的成員,或者您可以呼叫類別 CMapStringToOb的成員。

System_CAPS_ICON_note.jpg 注意

如果您為 參數指定 classstruct 型別,而不是指標或參考型別,類別或結構必須具有複製建構函式。

如需詳細資訊,請參閱 如何將型別安全集合

集合

顯示: