安全地将(shared_ptr向量转换为对象)转换为(向量向量shared_ptr到常量对象)

Safely convert (vector of shared_ptr to objects) to (vector of shared_ptr to constant objects)

本文关键字:向量 转换 对象 ptr shared 常量 安全      更新时间:2023-10-16
class A {};
typedef shared_ptr<const A*> AConstPtr;
typedef shared_ptr<A*> APtr;
vector<APtr> ptr;
const vector<AConstPtr>* foo()
{
    return &ptr;
}

此代码无法编译,因为"没有从向量< Aptr > * 到 const 向量< AConstPtr > * 的隐式转换"有没有办法在不创建新向量和不使用不安全的强制转换的情况下完成这项工作?

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

没有

办法进行这样的转换,因为不同的shared_ptr不是相关的类型。

首先,你真的确定需要公开存在共享指针的内部向量的实现细节吗?这真的会将您绑定到该实现,并且在不破坏 API 的情况下不会发生变化。

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