2011-07-14 19 views
8

MFC CARRAYクラスは(MSDNから)2つのテンプレートパラメータがあります。MFC CArrayでは、異なるデフォルトテンプレートタイプを使用する理由は何ですか?

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

ARG_TYPEのデフォルトパラメータがconst TYPE&で、SOデフォルト(例えばShould the ARG_TYPE for a CArray be const & or not異なるタイプを使用する際に尋ねる、または上のいくつかの質問What's the difference between CArray and CArray ?)。

私の質問は今です:ARG_TYPEがTYPEまたはconst TYPE&ではない、ARR_TYPEが妥当な使用例がありますか?別のクラス?これらの用途の理由は何ですか?

+3

あなたの質問には答えられませんが、** CArrayは使用しないでください。それはコピー構築の代わりに 'memcpy'を使って要素をコピーする恐ろしいクラスです。したがって、ポインタを含むオブジェクトの配列を保持するために使用すると、アプリケーションがクラッシュします。代わりに 'std :: vector'を使用してください。 – Praetorian

+0

私はCArrayを使用しないように議論し、同僚にstd :: vectorを使用させるよう説得しています。私はこの奇妙なことについて疑問を抱いていました。 CMapは、4つのテンプレートパラメータと地図のソート順を決定する複雑な方法でさらに恐ろしいです... – vividos

答えて

2

私の推測では、継承階層に関連するはずです。

​​3210

あなたは派生classからconst参照を受け取ることができる受信引数としてベースclassを持っている場合があります。

1

私の最も良い例はCArray <CString, LPCTSTR>です。実際、CArray <CString, CString&>はうまく動作しませんでした...

関連する問題