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

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> *”的隐式转换
反正有没有创建一个新的向量,而不使用不安全的演员?

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

解决方法

由于不同的shared_ptrs不是相关类型,因此无法进行此类转换.

首先,您是否确实需要公开实现细节,即存在共享指针的内部向量?这实际上会将您与该实现联系起来,如果不破坏API,它将不会发生变化.

如何使用@ Cubbi的建议并让您的界面成为具有开始和结束方法的交互者?然后,您可以轻松地向外部客户端表示容器,而无需将自己绑定到矢量.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...