2011-07-14 57 views
8

的MFC CARRAY類有兩個模板參數(從MSDN):在MFC CArray中,使用不同默認模板類型的原因是什麼?

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

ARG_TYPE的默認參數是const TYPE&,並因此一些問題,問什麼時候使用不同類型的默認值(例如Should the ARG_TYPE for a CArray be const & or not,或What's the difference between CArray and CArray ?)。

我現在的問題是:是否存在ARR_TYPE不是TYPEconst TYPE&的合理CArray用例,例如,另一班?這些用法的原因是什麼?

+3

不是你的問題的答案,但**不要**使用'CArray'。這是一個可怕的類,它將使用memcpy而不是複製構造來複制它的元素。所以如果你用它來保存一個包含指針的對象數組,你的應用程序就會崩潰。改用'std :: vector'。 – Praetorian

+0

我正在尋找不使用CArray的參數,並且說服同事使用std :: vector,並且我懷疑這種怪異。使用4個模板參數和一個確定地圖中排序順序的複雜方法,CMap更加可怕... – vividos

回答

2

我的猜測是,它應該與繼承層次有關。

​​3210

您可能需要具有基部class作爲接收參數,它可以接收來自衍生class一個const參考。

1

我最好的例子是CArray <CString, LPCTSTR>。事實上,我記得CArray <CString, CString&>沒有很好地工作......

相關問題