c++ - unique_ptr 拥有的对象的索引运算符

标签 c++ unique-ptr subscript-operator

我正在开发一个 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/

相关文章:

c++ - 如何在 Mac OS X (C++) 中使用 dylib

c++ - 我的递归函数没有返回正确的值

c++ - vector<unique_ptr> 的初始化因复制错误而失败

c++ - 在 C++ 中重载 Subscript[] 运算符以设置类(量词)的大小。

c++ - 使用字符串文字初始化时,std::strings 是否以 '\0' 结尾?

c++ - 无法看到导致核心转储终止的异常

c++ - 在 Linux 机器上从源代码构建 Qt-4.3.2

c++ - 打破shared_ptr和unique_ptr之间的循环依赖

c++ - 为什么使用右值引用时unique_ptr的所有权没有转移?

c++ - C++ 的 operator[] 可以接受多个参数吗?