【问题标题】:In MFC CArray, what are reasons to use different default template type?在 MFC CArray 中,使用不同默认模板类型的原因是什么?
【发布时间】:2011-07-14 08:20:00
【问题描述】:

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

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

ARG_TYPE 的默认参数是const TYPE&amp;,SO 上的一些问题询问何时使用不同于默认的类型(例如Should the ARG_TYPE for a CArray be const & or notWhat's the difference between CArray and CArray ?)。

我现在的问题是:是否存在 ARG_TYPE 不是 TYPEconst TYPE&amp; 的 CArray 的合理用例,例如另一个班级?这些用法的原因是什么?

【问题讨论】:

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

标签: c++ templates mfc


【解决方案1】:

我的猜测是,应该和继承层次有关。

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

CArray<D, const B&> myArray;

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

【讨论】:

    【解决方案2】:

    我最好的例子是CArray &lt;CString, LPCTSTR&gt;。事实上,我记得CArray &lt;CString, CString&amp;&gt; 并没有很好地工作......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-28
      • 2016-03-26
      相关资源
      最近更新 更多