我正在从事c++项目。我需要放入std::vector不同的类。我发现(Objects of different classes in a single vector?)可以通过创建具有通用类型的类,然后将指针指向 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'(aka'std::unique_ptr ')没有提供下标运算符
如何告诉编译器第二个索引与TMyClass
对象有关,而不与unique_ptr
有关?如果有人向我解释在这种情况下如何访问元素,我将不胜感激。
最佳答案
您需要先提取指针
A[0] //type: std::unique_ptr<TMyClass>&
然后从该指针(指针)提取对象
*A[0] //type: TMyClass&
然后您可以在此对象上使用重载运算符
(*A[0])[0]