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的建议并让您的界面成为具有开始和结束方法的交互者?然后,您可以轻松地向外部客户端表示容器,而无需将自己绑定到矢量.
原文地址:https://www.jb51.cc/c/118155.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。