【问题标题】:Safely convert (vector of shared_ptr to objects) to (vector of shared_ptr to constant objects)安全地将(shared_ptr 到对象的向量)转换为(shared_ptr 到常量对象的向量)
【发布时间】:2011-05-17 01:57:39
【问题描述】:
class A {};

typedef shared_ptr<const A*> AConstPtr;
typedef shared_ptr<A*> APtr;

vector<APtr> ptr;

const vector<AConstPtr>* foo()
{
    return &ptr;
}

此代码无法编译,因为“没有从 vector&lt;Aptr&gt;* 到 const vector&lt;AConstPtr&gt; * 的隐式转换” 有没有办法在不创建新向量且不使用不安全演员表的情况下完成这项工作?

我需要这个的原因是因为我有一个类在内部将列表存储为vector&lt;APtr&gt;,但需要通过其接口公开它的完全const版本。

【问题讨论】:

  • 能否改为通过其接口公开一对迭代器?

标签: c++ vector casting constants shared-ptr


【解决方案1】:

没有办法进行这种转换,因为不同的shared_ptrs 不是相关类型。

首先,您确定需要公开共享指针内部向量的实现细节吗?这确实会将您与该实现联系在一起,并且不会在不破坏 API 的情况下进行更改。

使用@Cubbi 的建议并让你的接口成为beginend 方法的交互器怎么样?然后,您可以轻松地向外部客户端表示容器,而无需将自己绑定到 vector

【讨论】:

    猜你喜欢
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    • 2010-12-27
    • 2020-01-08
    • 2013-02-16
    • 2021-06-02
    • 2019-03-28
    相关资源
    最近更新 更多