在MFC CArray中,使用不同默认模板类型的原因是什么?

时间:2011-07-14 08:20:00

标签: c++ templates mfc

MFC CArray类有两个模板参数(来自MSDN):

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 notWhat's the difference between CArray and CArray ?)。

我现在的问题是:是否存在合理的CArray用例,其中ARG_TYPE不是TYPEconst TYPE&,例如另一堂课?这些用法的原因是什么?

2 个答案:

答案 0 :(得分:2)

我的猜测是,它应该与继承层次结构有关。

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

CArray<D, const B&> myArray;

您可能希望将基础class作为接收参数,该参数可以从派生的const接收class引用。

答案 1 :(得分:1)

我最好的例子是CArray <CString, LPCTSTR>。事实上,我记得CArray <CString, CString&>效果不佳......