安全地将(shared_ptr向量转换为对象)转换为(向量向量shared_ptr到常量对象)
Safely convert (vector of shared_ptr to objects) to (vector of shared_ptr to constant objects)
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 的建议并让您的接口成为begin
和end
方法的交互器怎么样?然后,您可以轻松地向外部客户端表示容器,而无需将自己绑定到vector
。
相关文章:
- 将CHW格式的浮点向量转换为cv::Mat
- 将元组的向量转换/构造为堆
- 将编译时常量向量转换为堆分配版本
- 在 Cython 中将C++向量转换为 numpy 数组,而无需复制
- 在<uint8_t> <char> c++ 中将常量向量转换为常量向量
- C++ 将地址保存为字符串的向量转换为新的向量
- 如何使用 STL 算法将整数向量转换为字符串向量?
- 在 c++ 中将集合转换为向量和向量转换为字符串时出现运行时异常
- 如何使用istream_iterator将无符号字符向量转换为字符串?
- 如何在 c++ 中将向量转换为<string>常量字符* const*?
- 将字符向量转换为单个字符串
- <int> 使用 fmt 库将向量转换为字符串
- 将 c++ 向量转换为字符 ** 而不会泄漏内存
- 在C++中将字符向量转换为字符串向量
- 避免从单一元素向量转换为基元类型
- 无法从向量<T>转换为 T
- 将浮点数向量转换为十六进制/二进制字符串
- 虚拟地将结构向量转换为结构成员的向量
- 将整数向量转换为字节数组向量,然后调用每个字节数组
- 如何从向量转换为<char>数字整数