Aracılığıyla paylaş


Şablon tabanlı sınıflar

Bu makalede, mfc sürüm 3.0 ve sonraki denkliği şablon tabanlı koleksiyon sınıfları açıklar.Tür-güvenli topluluklar oluşturmak için bu şablonları kullanarak daha kolaydır ve tür güvenliği şablonlarına dayalı olmayan koleksiyon sınıflarını kullanmak çok daha verimli bir şekilde sağlanır.

mfc koleksiyonlarını şablona dayalı iki kategoriye önceden belirler:

  • Basit dizi, liste ve harita sınıfları

    CArray, CList, CMap

  • Diziler, listeleri ve yazılı işaretçiler haritaları

    CTypedPtrArray, CTypedPtrList, CTypedPtrMap

Basit bir koleksiyon sınıfları tüm sınıfından türetilen CObject, böylece bunlar seri hale getirme, dinamik oluşturma ve diğer özelliklerini devralır CObject.Yazılı işaretçi koleksiyon sınıfları sınıf türetmek karşı belirtmek gerekir — hangi biri olmalıdır gibi mfc tarafından önceden nontemplate işaretçisi koleksiyonları CPtrList veya CPtrArray.Yeni koleksiyon sınıfınızın belirtilen taban sınıfından miras alır ve tür güvenliği zorlamak için temel sınıf üyesi kapsüllenmiş çağrıları yeni sınıfın üye işlevlerini kullanın.

C++ şablonları hakkında daha fazla bilgi için bkz: şablonları , C++ dil başvurusu.

Basit dizi, liste ve harita şablonlarını kullanma

Basit bir koleksiyonun şablonları kullanmak için ne tür veriler bu koleksiyonları depolamak ve koleksiyon bildirimleri kullanmak için hangi parametrelerin bilmeleri gerekir.

f728cbk3.collapse_all(tr-tr,VS.110).gifBasit dizi ve liste kullanımı

Basit dizi ve sınıfları, CArray ve CList, iki parametre alır: türü ve ARG_TYPE.Bu sınıflar, belirttiğiniz herhangi bir veri türü saklayabilirsiniz türü parametresi:

  • Gibi temel C++ veri türleri int, char, ve float

  • C++ yapılar ve sınıflar

  • Tanımladığınız diğer türleri

Kolaylık ve verimlilik için kullanabileceğiniz ARG_TYPE işlevi bağımsız değişken türünü belirtmek için parametre.Tipik olarak, belirttiğiniz ARG_TYPE olarak adlandırılan tür başvuru olarak türü parametresi.Örne?in:

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

İlk örnek bir dizi toplama bildirir myArray, içeren ints.İkinci örnek bir liste koleksiyonu bildirir myList, depolar, CPerson nesneler.Bağımsız değişken türü tarafından belirtilen belirli bir üye işlevleri koleksiyon sınıfları ele ARG_TYPE şablon parametresi.Örneğin, Ekle sınıfının üye işlev CArray götüren bir ARG_TYPE bağımsız değişkeni:

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

f728cbk3.collapse_all(tr-tr,VS.110).gifBasit harita kullanımı

Basit eşleme sınıf CMap, dört parametre alır: anahtar, ARG_KEY, değeri, ve ARG_VALUE.Dizi ve liste sınıfları gibi herhangi bir veri türü eşleme sınıfları saklayabilirsiniz.Diziler ve dizin ve depoladıkları veri sipariş listeleri farklı olarak anahtarları ve değerleri eşlemeleri ilişkilendirme: ilişkili anahtar değer belirterek bir harita içinde depolanan değeri erişim.Anahtar parametre eşleme içinde depolanan verilere erişmek için kullanılan anahtarları veri türünü belirtir.Varsa türü anahtar bir yapı ya da sınıf, ARG_KEY parametresi genellikle başvuru için belirtilen tür anahtar.Değeri parametresi Haritası'nda saklanan öğelerin türünü belirtir.Varsa türü ARG_VALUE bir yapı ya da sınıf, ARG_VALUE parametresi genellikle başvuru için belirtilen tür değeri.Örne?in:

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

İlk örnek mağazalar MY_STRUCT değerleri, onları erişir int anahtarları ve erişilen verir MY_STRUCT öğeler tarafından başvuru.İkinci örnek mağazalar CPerson değerleri, onları erişir CString anahtarları ve erişilen öğeleri başvuru döndürür.Bu örnek, kişileri soyadına göre göz önünde bir basit adres defteri gösterebilir.

Çünkü anahtar parametresi türü CString ve key_type parametresi türü LPCSTR, anahtarları haritada türde öğeler depolanır CString işlevleri gibi başvurulan, ancak SetAt türü işaretçi üzerinden LPCSTR.Örne?in:

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

İşaretçinin yazdığınız toplama şablonları kullanma

Yazılı işaretçi toplama şablonları kullanmak için ne tür veriler bu koleksiyonları depolamak ve koleksiyon bildirimleri kullanmak için hangi parametrelerin bilmeleri gerekir.

f728cbk3.collapse_all(tr-tr,VS.110).gifİşaretçinin yazdığınız dizi ve liste kullanımı

İşaretçinin yazdığınız dizi ve sınıfları, CTypedPtrArray ve CTypedPtrList, iki parametre alır: BASE_CLASS ve türü.Bu sınıflar, belirttiğiniz herhangi bir veri türü saklayabilirsiniz türü parametresi.Bunlar bir işaretçi saklar nontemplate koleksiyon sınıfları türetilmiştir; Bu temel sınıf belirtmek BASE_CLASS.Diziler için kullanın CObArray veya CPtrArray.Listeler için kullanın CObList veya CPtrList.

Temel toplama bildirdiğinizde aslında şunu söylüyor CObListyeni bir sınıf değil sadece kendi temel sınıf üyesi devralır, ancak onu da ek denkliği üye sayısı işlevler ve işleçler, tür güvenliği, temel sınıf üyesi çağrıları Kapsüllenen tarafından sağlanmasına yardımcı bildirir.Bu encapsulations tüm gerekli tür dönüştürmesi yönetin.Örne?in:

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

İlk örnek bir işaretçi yazılan dizi bildirir myArray, dan türetilmiş CObArray.Dizi depolar ve işaretçiler verir CPerson nesneleri (burada CPerson den türetilmiş bir sınıf CObject).Herhangi bir arama CObArray üye işlevi veya yeni tür-güvenli çağırabilir GetAt ve ElementAt işlevleri veya denkliği kullanmak [] işleci.

İkinci örnek yazılı işaretçi listesini bildirir myList, dan türetilmiş CPtrList.Listesini saklar ve işaretçiler verir MY_STRUCT nesneler.Bir sınıf temel CPtrList işaretçiler türetilen olmayan nesneleri depolamak için kullanılan CObject.CTypedPtrListhas a number of type-safe member functions: GetHead, GetTail, RemoveHead, RemoveTail, GetNext, GetPrev, and GetAt.

f728cbk3.collapse_all(tr-tr,VS.110).gifİşaretçinin yazdığınız harita kullanımı

Yazılı işaretçi haritası sınıfı CTypedPtrMap, üç parametre alır: BASE_CLASS, anahtar, ve değeri.BASE_CLASS Parametresi, yeni bir sınıf türetmek sınıfını belirtir: CMapPtrToWord, CMapPtrToPtr, CMapStringToPtr, CMapWordToPtr, CMapStringToObve benzeri.ANAHTAR ROM'una benzer anahtar , CMap: aramalar için kullanılan anahtarı belirtir.DEĞERİ ROM'una benzer değeri , CMap: haritada saklı nesne türünü belirtir.Örne?in:

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

Temel harita ilk örneği olan CMapPtrToPtr — kullandığı CString işaretçiler eşlenen anahtarları MY_STRUCT.Tür-güvenli çağırarak, saklı bir işaretçi bakabilirsiniz Lookup üye işlevi.Kullanabileceğiniz [] saklı bir işaretçi arayın ve ekleyin yoksa için bulunan işleci.Ve denkliği kullanarak eşleme yineleyebilirsiniz GetNextAssoc işlevi.Diğer üye sınıfı işlevler çağırabilirsiniz CMapPtrToPtr.

Temel harita ikinci örnek ise CMapStringToOb — saklı işaretçiler eşlenen dize anahtarları kullanan CMyObject nesneler.Önceki paragrafta açıklanan aynı tür-güvenli üyeleri kullanabilir veya sınıf üyesi çağırabilirsiniz CMapStringToOb.

[!NOT]

Belirtirseniz, bir sınıfı veya struct için değeri parametresi yerine işaretçi veya tür, sınıf veya yapı referansı Kopyala yapıcı olması gerekir.

Daha fazla bilgi için bkz: tür-güvenli tahsilat nasıl.

Ayrıca bkz.

Kavramlar

Koleksiyonlar