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]
。不好看,但这是给你的建议
我正在做一个 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]