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

C++ 在MFC CArray中,使用不同默认模板类型的原因是什么?,c++,templates,mfc,C++,Templates,Mfc,MFC CArray类有两个模板参数(来自): template 类卡雷 ... ARG_TYPE的默认参数是const TYPE&,因此,一些问题会询问何时使用与默认类型不同的类型(例如,或) 我现在的问题是:是否有合理的CArray使用案例,其中ARG_类型不是类型或常量类型&,例如另一个类?这些用法的原因是什么?我的猜测是,它应该与继承层次结构相关 struct B {}; struct D : B {}; CArray<D, const B&> myArray;

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

template
类卡雷
...
ARG_TYPE
的默认参数是
const TYPE&
,因此,一些问题会询问何时使用与默认类型不同的类型(例如,或)


我现在的问题是:是否有合理的CArray使用案例,其中ARG_类型不是
类型
常量类型&
,例如另一个类?这些用法的原因是什么?

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

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

CArray<D, const B&> myArray;
结构B{}; 结构D:B{}; 卡雷阵列;
您可能希望使用base
class
作为接收参数,它可以从派生的
class

接收
const
引用。我最好的例子是
CArray
。事实上,我记得
CArray
没有很好地工作…

不是对你问题的回答,但不要使用
CArray
。这是一个可怕的类,它将使用
memcpy
而不是复制构造来复制其元素。因此,如果您使用它来保存包含指针的对象数组,您的应用程序将崩溃。改用
std::vector
。我正在寻找不使用CArray的论点,并说服同事使用std::vector,我想知道这个奇怪之处。CMap甚至更可怕,有4个模板参数和一种确定映射中排序顺序的复杂方法。。。
struct B {};
struct D : B {};

CArray<D, const B&> myArray;