Приведение map к map

178
15 декабря 2016, 16:05
class A {};
class B : public A {};
unordered_map<int, shared_ptr<B> >  bs;

Как привести bs к unordered_map<int, shared_ptr<A> >?

Answer 1

Никак, это невозможно нормальными средствами.

Действительно, представьте себе, что это было бы возможно:

unordered_map<int, shared_ptr<B> > bs;
unordered_map<int, shared_ptr<A> > as =
           some_special_cast< unordered_map<int, shared_ptr<A> > >(bs);

Тогда вы смогли бы добавить экземпляр класса A в as (shared_ptr<A> pa(new A()); as[0] = pa;). То есть и в bs! А это получиться не имеет права.

Вы можете попробовать reinterpret_cast, но это очень уж низкоуровневый хак.

Вот ещё по теме: C++ FAQ/21.3.

В .NET есть так называемые ковариантные интерфейсы: имея контейнер объектов порождённого класса, вы можете получить read-only view на него как на контейнер элементов базового класса. Но в C++ такого нет.

Скорее всего, вашу проблему можно решить с помощью шаблонов. Расскажите о вашей настоящей задаче.

READ ALSO
Как отобразить воксели?

Как отобразить воксели?

Хочу понять, как пользоваться вокселямиКак всё это работает, представляю, а вот как это выразить в кусочке кода на c++ - не знаю

186
Есть ли утилита для автоисправления delete в C++?

Есть ли утилита для автоисправления delete в C++?

Есть много сгенерированного кода c++ без использования оператора deleteНужна утилита для автоматического исправления этого, которая бы записывала...

158
MPI. Проблемы с алгоритмом

MPI. Проблемы с алгоритмом

Норма находится как максимальная по модулю сумма элементов строкиВроде что-то распараллелил, процессы подсчитывают суммы, но в цикл нахождения...

193
QWebView DOM структура

QWebView DOM структура

Есть ли встроенные средства для отладки QWebView? Интересует просмотр DOM структуры

163