2017-02-22 24 views
-1

Контекст: Я создатьПреобразование типа структуры STL в C++

std::map<type, Base> 

внутри функции, где отображение задается в качестве опорного параметра. Эта функция идеально называется где-то с опорным параметром

std::map<type, Derived>&. 

Что такое лучший способ конвертировать из

std::map<type, Derived> 

в

std::map<type, Basis> 

где Basis является основой класс Derived? Я уже безуспешно пытался конвертировать через прямой трансляции. Я бы предпочел не переключаться с Derived на Derived * и с Base на Base *.

Мне нужно будет запустить функцию для создания карты с элементами Basis, а затем вернуть ее и работать с картой с Derived элементами.

+1

Пожалуйста, добавьте дополнительную информацию о том, какой контейнер у вас есть и какой контейнер вы хотите посетить. И то, что вы пробовали. – NathanOliver

+0

Если вы говорите о том, «где базируется ...», то что-то от него должно иметь это слово. Вы, по сути, задаете такой вопрос, как «У меня проблема, когда материал не работает», без каких-либо подробностей. – Aziuth

+0

Вы хотите сделать что-то вроде 'basis_map [something] .some_function();' и иметь функцию вызванного производного класса? – NathanOliver

ответ

4

Вы просто не можете конвертировать из контейнера Derived в контейнер Base. Во-первых, если Derived больше Base, что произойдет с дополнительными битами?

Если вы хотите что-то приближается решение без сырых указателей, используйте:

std::map<type, std::unique_ptr<Base>> 

Затем вы можете поместить либо Base или результирующие объекты на карту.