144 / 88 / 23
Регистрация: 31.08.2016
Сообщений: 777
|
|
1 | |
Как поместить в STL-контейнер экземпляры разных классов?31.08.2016, 10:42. Показов 3486. Ответов 30
0
|
31.08.2016, 10:42 | |
Ответы с готовыми решениями:
30
Поместить экземпляры разных классов в один массив Как создать класс контейнер-динамический массив и поместить туда объекты других классов? Создать экземпляры разных производных классов в зависимости от условий Как положить в массив экземпляры классов? |
698 / 105 / 19
Регистрация: 22.06.2014
Сообщений: 234
|
|
31.08.2016, 10:58 | 3 |
Всё смешалось - люди, кони. Если приходиться прибегать к хранению объектов разных типов в одном контейнере, и тем более потом проверять их принадлежность к типу функцией
std::dynamic_cast<T*> , то скорее всего архитектура построения зависимостей ваших классов продумана не совсем грамотно. Если это не налагает дополнительных расходов по пересмотрению, вроде переписывания всего проекта в целом, то не стоит прибегать к такой изощрённой схеме. Да и в случае чего отладка таких нагромождений будет достаточно тяжела. Но я в данном вопросе дилетант, так что другие гуру имеют полное право меня пнуть за моё невежество.
2
|
144 / 88 / 23
Регистрация: 31.08.2016
Сообщений: 777
|
|
31.08.2016, 11:02 [ТС] | 4 |
0
|
Любитель чаепитий
|
||||||
31.08.2016, 11:08 | 5 | |||||
Martein, Да нет, Вы всё правильно говорите( хоть я и не эксперт ). Просто я дал ТСу ответ на тот вопрос, который он задал, вернее, на часть вопроса.
Добавлено через 3 минуты qppq, Ну тип может быть фундаментальным, например: int, char, double, etc. Это не классы и им нельзя приписать родителей. К классам из библиотеки STL, кстати, тоже нельзя. В общем можно только свои классы пихать, как-то так:
1
|
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
|
|
31.08.2016, 11:40 | 7 |
ну и есть классический костыль - заворачиваем в одну структуру enum и union.
1
|
144 / 88 / 23
Регистрация: 31.08.2016
Сообщений: 777
|
|
31.08.2016, 12:23 [ТС] | 8 |
HelicopterK52,
0
|
31.08.2016, 20:23 | 9 |
Что не понятно то? Это части библиотек.
Идиомы С++. Type erasure http://en.cppreference.com/w/cpp/experimental/any
1
|
42 / 42 / 17
Регистрация: 25.04.2014
Сообщений: 499
|
|||||||||||
31.08.2016, 23:32 | 10 | ||||||||||
2
|
144 / 88 / 23
Регистрация: 31.08.2016
Сообщений: 777
|
|
01.09.2016, 10:14 [ТС] | 11 |
а как идентифицировать какой тип данных в ячейке при чтении из контейнера
0
|
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
|
|
01.09.2016, 10:25 | 12 |
А полиморфные объекты на то и полиморфные чтобы ничего не идентифицировать. У них есть абстрактное действие/действия. Вызываешь для нужного/каждого как для абстрактного предка а каждый его выполняет по своему.
0
|
144 / 88 / 23
Регистрация: 31.08.2016
Сообщений: 777
|
|
01.09.2016, 10:40 [ТС] | 13 |
то есть нада помнить что-где лежит?
0
|
01.09.2016, 11:02 | 14 |
0
|
01.09.2016, 11:09 | 15 |
А мне нравится когда можно идентифицировать.
использовать динамически типизированные языки типа Java и C#, и их instance of и is. Как в плюсах с этим, не знаю. Может any решает этот вопрос, не ясно ценой какого оверхеда. ЗЫ о, пока набирал уже написали про type_id.
0
|
01.09.2016, 11:12 | 16 |
Какая может быть цена, если сам ничего руками не пишешь?
И согласен если не нужна типизация, то вероятно стоит подумать о том что бы встроить в программу что-то скриптовое например python или lua
0
|
01.09.2016, 11:16 | 17 |
За боксинг-анбоксинг и типоопределитинг. Например, делать структуру с указателем на void и полем char *typename - достаточно дорого, помимо выделения памяти и запаковки приходится строку читать и сравнивать.
0
|
01.09.2016, 11:27 | 19 |
В сравнении с теми же приведенными instance of и is в Шарпе и Джаве. Там это не вручную скриптами под капотом и не либами поверх ядра, там это в самом ядре языка сделано и компилируется не в парсинг строкового имени типа.
0
|
01.09.2016, 11:29 | 20 |
0
|
01.09.2016, 11:29 | |
01.09.2016, 11:29 | |
Помогаю со студенческими работами здесь
20
Как использовать экземпляры классов МFC? Как удалить элементы используя контейнер STL ? Как считать из файла в контейнер STL (map) Как сериализовать/десериализовать экземпляры классов в файл Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |