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版本。
答案 0 :(得分:6)
由于不同的shared_ptr
不是相关类型,因此无法进行此类转换。
首先,您是否确实需要公开实现细节,即存在共享指针的内部向量?这真的会将你与实现联系起来,如果不破坏API,它将不会发生变化。
如何使用@ Cubbi的建议并让您的界面成为begin
和end
方法的交互者呢?然后,您可以轻松地向外部客户端表示容器,而无需将自己与vector
绑定。