class A {};
class B : public A {};
unordered_map<int, shared_ptr<B> > bs;
Как привести bs
к unordered_map<int, shared_ptr<A> >
?
Никак, это невозможно нормальными средствами.
Действительно, представьте себе, что это было бы возможно:
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++ такого нет.
Скорее всего, вашу проблему можно решить с помощью шаблонов. Расскажите о вашей настоящей задаче.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Хочу понять, как пользоваться вокселямиКак всё это работает, представляю, а вот как это выразить в кусочке кода на c++ - не знаю
Есть много сгенерированного кода c++ без использования оператора deleteНужна утилита для автоматического исправления этого, которая бы записывала...
Норма находится как максимальная по модулю сумма элементов строкиВроде что-то распараллелил, процессы подсчитывают суммы, но в цикл нахождения...
Есть ли встроенные средства для отладки QWebView? Интересует просмотр DOM структуры