我正在开发一个 C++ 项目。我需要将不同的类放入 std::vector 中。我发现(Objects of different classes in a single vector?)可以通过创建具有公共(public)类型的类然后将指针放入 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>&
然后从该指针(被指向者)中提取对象
*A[0] //type: TMyClass&
然后您可以在该对象上使用重载运算符
(*A[0])[0]
关于c++ - unique_ptr 拥有的对象的索引运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61633686/