Tri*_*ock 7 c++ casting const vector shared-ptr
class A {};
typedef shared_ptr<const A*> AConstPtr;
typedef shared_ptr<A*> APtr;
vector<APtr> ptr;
const vector<AConstPtr>* foo()
{
return &ptr;
}
Run Code Online (Sandbox Code Playgroud)
这段代码不能编译,因为"没有从向量<Aptr >*到const向量<AConstPtr >*的隐式转换"无论如何都可以使这个工作,而不创建一个新的向量,并且不使用不安全的转换?
我需要这个的原因是因为我有一个类在内部将列表存储为向量<APtr >,但需要通过其接口公开它的完全const版本.
由于不同的shared_ptrs不是相关类型,因此无法进行此类转换.
首先,您是否确实需要公开实现细节,即存在共享指针的内部向量?这实际上会将您与该实现联系起来,如果不破坏API,它将不会发生变化.
那么使用@ Cubbi的建议并让你的界面成为交互者begin和end方法呢?然后,您可以轻松地向外部客户端表示容器,而无需自己动手vector.