2

我正在做一个 c++ 项目。我需要放入一个 std::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<.....>”)不提供下标运算符

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

4

2 回答 2

4

您需要先提取指针

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

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

*A[0] //type: TMyClass&

然后你可以在这个对象上使用你的重载运算符

(*A[0])[0] 
于 2020-05-06T11:13:22.880 回答
1

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

于 2020-05-06T11:16:34.070 回答