2011-07-14 6 views
8

MFC CArray sınıf (MSDN itibaren) iki şablon parametresi vardır:MFC CArray'de, farklı varsayılan şablon türlerini kullanmanın nedenleri nelerdir?

template < class TYPE, class ARG_TYPE = const TYPE& > 
class CArray 
... 

ARG_TYPE için varsayılan parametre const TYPE& ve SO üzerinde bazı sorular (varsayılan örn Should the ARG_TYPE for a CArray be const & or not farklı bir türü kullanmak ne zaman sormak veya What's the difference between CArray and CArray ?).

Sorularım şimdi: ARG_TYPE'nin TYPE veya const TYPE& olmadığı makul kullanım durumları var mı? başka sınıf? Bu kullanımların nedenleri nelerdir?

+3

Değil sorunuzun cevabı ... CArray <CString, CString&> çok iyi çalışmadı hatırlama, ama ** ** 'CArray' KULLANMAYIN. Öğelerini, kopya yapımı yerine 'memcpy' kullanarak kopyalayacak korkunç bir sınıftır. Dolayısıyla, işaretçi içeren bir nesne dizisini tutmak için kullanırsanız, uygulamanız çökecektir. Bunun yerine 'std :: vector' kullanın. – Praetorian

+0

CArray'ı kullanmama ve meslektaşları std :: vektörünü kullanmaya ikna etmeme argümanları arıyorum ve bu garipliği merak ettim. CMap, 4 şablon parametresiyle daha da korkunç ve haritadaki sıralama düzenini belirlemek için karmaşık bir yol ... – vividos

cevap

2

Benim tahminim bu, miras hiyerarşisi ile ilgili olmalıdır.

struct B {}; 
struct D : B {}; 

CArray<D, const B&> myArray; 

Türetilen class bir const referans alabilir alıcı bağımsız değişken olarak baz class olması iyi olur.

1

En iyi örneğim CArray <CString, LPCTSTR>. Aslında,