2016-06-17 2 views
2

Поскольку указатель и ссылка оба достигают отношения is-a в контексте наследования на C++. Так как мы используем для хранения контейнера указателей для объекта до , получаем полиморфное поведение, это также возможно сделать с контейнерами? То есть для хранения ссылок вместо указателей в контейнере?Контейнер с полиморфными объектами

Мой вопрос отличается от this, потому что это в контексте полиморфизма

+0

Указатели являются ссылками, я думаю. Можете ли вы подробнее объяснить свое требование? Или привести пример? – Elyasin

+0

вместо того, чтобы установить мы установим такое возможно? –

+6

@Elyasin - Указатели * не * ссылки – Smeeheey

ответ

0

Вы можете сделать это с помощью специального класса std::reference_wrapper, например:

std::vector<std::reference_wrapper<MyClass>> ref_vector; 

Вот пример использования:

std::vector<int> vec{1, 2}; 
std::vector<std::reference_wrapper<int>> refs(vec.begin(), vec.end()); 

vec[1] = 3; 
std::copy(refs.begin(), refs.end(), std::ostream_iterator<int>(std::cout, " ")); 

Выходной сигнал «1 3», который показывает, что ссылки на оригинальные элементы хранятся, а не копии (otherwis e выход был бы «1 2»).

+0

Не могли бы вы, если возможно, указать некоторые примеры использования? –

+1

[FYI] 'reference_wrapper' просто обертывает указатель. – NathanOliver

+0

@NathanOliver: цитирование из cppreference: "std :: reference_wrapper - это шаблон класса, который обертывает ссылку в подлежащем копированию присваиваемом объекте. Он часто используется как механизм для хранения ссылок внутри стандартных контейнеров (например, std :: vector), которые не могут обычно содержат ссылки ». – Smeeheey

Смежные вопросы