Я работаю над проектом на 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] type 'value_type' (aka 'std :: unique_ptr <.....>') не предоставляет оператор индекса
Как я могу сказать компилятору, что второй индекс относится к объекту TMyClass
, а не к unique_ptr
? Я был бы очень признателен, если бы кто-нибудь объяснил мне, как получить доступ к элементам в этом случае.