【问题标题】:CArray and const template parameterCArray 和 const 模板参数
【发布时间】:2010-11-01 20:19:43
【问题描述】:

CArray 是否可以使用 const 参数

我目前正在使用这样的 CArray,但它不会编译:

typedef CArray<const CString, const CString&> data_container;

我总是得到这个编译错误:

错误 C2664:'ATL::Checked::memcpy_s' : 无法将参数 1 从 'const CString *' 到 'void *'

【问题讨论】:

    标签: c++ templates mfc constants


    【解决方案1】:

    CArray 使用的代码要求您的 TYPE 是非常量的,因此它可以强制转换为 void*(如编译错误消息所述)。

    您可以存储 const CString 指针,这将在取消引用时为您提供 const CString。您现在确实有分配/清理该内存的负担。另一种方法是将 CString 包装在一个简单的类中,该类具有一个“GetString”函数,该函数返回对其内部 CString 实例的 const 引用。

    【讨论】:

    • 也就是说,CArrays可以通过多种方式修改其内容(从序列化加载,从另一个复制等),所以内容不能是const。
    • 是否有替代方案可以允许 const 内容?
    【解决方案2】:

    显然没有。为什么要这样做?

    【讨论】:

    • 那些 CString 不应该改变,所以 const 接缝合适。
    • 这是否意味着您要允许插入和删除,但不允许修改?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 2011-08-25
    • 2011-04-10
    • 1970-01-01
    相关资源
    最近更新 更多