unique_ptr 拥有的对象的索引运算符

Indexing operator of an object owned by unique_ptr

我正在做一个 C++ 项目。我需要放入一个 std::vector 不同的 类。我发现 (Objects of different classes in a single vector?) 可以通过使用通用类型创建 类 然后将指针指向向量来实现这一点。在这种情况下,我可以将指针转换为我需要的类型。这一点我很清楚。

还提到原则上不仅可以使用指针,还可以使用 smart_pointers,即 std::vector<std::unique_ptr<TMyClass>>。这就是我的问题开始的地方。 TMyClass 具有索引运算符 (operator[])。

假设我有 std::vector<std::unique_ptr<TMyClass>> A。我尝试像这样访问 TMyClass 对象的元素 A[0][0]A[0].get()[0](A[0])[0] 但是当我编译时我得到一个错误:

[bcc64 错误] 类型 'value_type'(又名 'std::unique_ptr<.....>')不提供下标运算符

我如何告诉编译器第二个索引与 TMyClass 对象相关而不是 unique_ptr?如果有人向我解释如何在这种情况下访问元素,我将不胜感激。

你需要先提取指针

A[0]  //type: std::unique_ptr<TMyClass>&

然后从该指针(pointee)中提取对象

*A[0] //type: TMyClass&

然后您可以在此对象上使用重载运算符

(*A[0])[0] 

指针必须取消引用。所以,我会猜测 (*A[0])[0] A[0]->[0]。不好看,但这是给你的建议