Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
qppq
11 / 11 / 1
Регистрация: 31.08.2016
Сообщений: 160
Завершенные тесты: 1
#1

Как поместить в STL-контейнер экземпляры разных классов? - C++

31.08.2016, 10:42. Просмотров 883. Ответов 30

Как поместить в контейнер экземпляры разных классов(типов) ?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.08.2016, 10:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как поместить в STL-контейнер экземпляры разных классов? (C++):

Как создать класс контейнер-динамический массив и поместить туда объекты других классов? - C++
Какой тип массива использовать тип базового класса или наследников?

Как использовать экземпляры классов МFC? - C++
Такая проблема: С помощью MFC AppWizard создал проект, в котором редактируется некая древо-структура. Есть класс СMyDoc, который...

STL, контейнер set - C++
Помогите, пожалуйста. Задание состоит вот в чем: даны названия городов, и для них перечислены города, в которые можно попасть без...

STL-контейнер.Переделать реализацию. - C++
Ребята, написал прогу, в которой контейнер типа вектор хранит данные класса банк, и проводит с ними дейтвия, сортировка, поиск, добавление,...

STL контейнер ошибка компиляции - C++
#include <iostream> #include <map> #include <iterator> #include <string> using namespace std; int main() { string word; ...

C++ STL Создать контейнер (Stack) - C++
1. Создать объект-контейнер и заполнить его данными, тип stack 2. Просмотреть контейнер. 3. Изменить контейнер, удалив из него одни...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Avazart
Эксперт С++
7152 / 5329 / 278
Регистрация: 10.12.2010
Сообщений: 23,585
Записей в блоге: 17
01.09.2016, 11:12 #16
Цитата Сообщение от _Ivana Посмотреть сообщение
не ясно ценой какого оверхеда.
Какая может быть цена, если сам ничего руками не пишешь?
И согласен если не нужна типизация, то вероятно стоит подумать о том что бы встроить в программу что-то скриптовое например python или lua
_Ivana
3060 / 1747 / 151
Регистрация: 01.03.2013
Сообщений: 4,929
Записей в блоге: 2
01.09.2016, 11:16 #17
Цитата Сообщение от Avazart Посмотреть сообщение
Какая может быть цена
За боксинг-анбоксинг и типоопределитинг. Например, делать структуру с указателем на void и полем char *typename - достаточно дорого, помимо выделения памяти и запаковки приходится строку читать и сравнивать.
Avazart
Эксперт С++
7152 / 5329 / 278
Регистрация: 10.12.2010
Сообщений: 23,585
Записей в блоге: 17
01.09.2016, 11:25 #18
Цитата Сообщение от _Ivana Посмотреть сообщение
делать структуру с указателем на void и полем char *typename - достаточно дорого
Вместо typename- typeid т.е. целое, а не строка.
И дорого в сравнении с чем? "Скрипты" под капотом ведь скорее всего поступают также.
_Ivana
3060 / 1747 / 151
Регистрация: 01.03.2013
Сообщений: 4,929
Записей в блоге: 2
01.09.2016, 11:27 #19
В сравнении с теми же приведенными instance of и is в Шарпе и Джаве. Там это не вручную скриптами под капотом и не либами поверх ядра, там это в самом ядре языка сделано и компилируется не в парсинг строкового имени типа.
Avazart
Эксперт С++
7152 / 5329 / 278
Регистрация: 10.12.2010
Сообщений: 23,585
Записей в блоге: 17
01.09.2016, 11:29 #20
Цитата Сообщение от _Ivana Посмотреть сообщение
там это в самом ядре языка сделано и компилируется не в парсинг строкового имени типа.
А ядро языка на чем пишется и как? обычно на Си и ровно так же...
_Ivana
3060 / 1747 / 151
Регистрация: 01.03.2013
Сообщений: 4,929
Записей в блоге: 2
01.09.2016, 11:32 #21
Avazart, возможно. Тогда один из вариантов - свой костыльный any (пока они там в стандарте экспериментировать и утверждать будут), приправленный любым количеством дополнительных полей и методов (для реализации паритетных связей, например )
Avazart
Эксперт С++
7152 / 5329 / 278
Регистрация: 10.12.2010
Сообщений: 23,585
Записей в блоге: 17
01.09.2016, 11:36 #22
Все зависит от контекста, имея разный контекст- можно по разному оптимизировать.
Fulcrum_013
664 / 732 / 72
Регистрация: 14.12.2014
Сообщений: 5,701
Завершенные тесты: 3
01.09.2016, 11:47 #23
Цитата Сообщение от qppq Посмотреть сообщение
то есть нада помнить что-где лежит?
Нет. иерархию и действия с ними проектировать так чтобы не надо было помнить.

Добавлено через 7 минут
Цитата Сообщение от qppq Посмотреть сообщение
то есть нада помнить что-где лежит?
Нет. иерархию и действия с ними проектировать так чтобы не надо было помнить. К примеру пуля ракета бомба - все это можно назвать одним словом "снаряд". "снаряд" умеет лететь после запуска. Но каждый по своему. Делаешь абстрактный класс снаряд с абстрактным виртуальным методом "лететь" и специализации "пуля" "ракета" и "бомба". Каждая из специализаций хранит свой набор данных нужный для счета следующего шага траектории и имеет свой метод "лететь". Засовываешь все это в один массив "снаряд". И не разбирая кто есть кто вызываешь им всем по порядку метод "лететь" а летит в результате каждый по своему.
Т.е. реально имеет смысл пихать объекты разных типов в один массив только если можно работать с ними не разбирая кто есть кто.
GbaLog-
Любитель чаепитий
2712 / 1245 / 301
Регистрация: 24.08.2014
Сообщений: 4,455
Записей в блоге: 1
Завершенные тесты: 2
01.09.2016, 11:51 #24
Цитата Сообщение от _Ivana Посмотреть сообщение
Тогда один из вариантов - свой костыльный any (пока они там в стандарте экспериментировать и утверждать будут)
Есть же Boost'овский.

Добавлено через 40 секунд
Цитата Сообщение от _Ivana Посмотреть сообщение
приправленный любым количеством дополнительных полей и методов
А, ну тогда лучше свой, конечно.
Можно даже поверх бустовского.
Avazart
Эксперт С++
7152 / 5329 / 278
Регистрация: 10.12.2010
Сообщений: 23,585
Записей в блоге: 17
01.09.2016, 12:00 #25
А бустовский что сильно отличается от STL -ного?
GbaLog-
Любитель чаепитий
2712 / 1245 / 301
Регистрация: 24.08.2014
Сообщений: 4,455
Записей в блоге: 1
Завершенные тесты: 2
01.09.2016, 12:01 #26
Avazart, Нет, но он хотя бы не в experimental стадии.
Avazart
Эксперт С++
7152 / 5329 / 278
Регистрация: 10.12.2010
Сообщений: 23,585
Записей в блоге: 17
01.09.2016, 12:03 #27
Цитата Сообщение от GbaLog- Посмотреть сообщение
Avazart, Ну хотя бы тем, что он не в experimental стадии.
Ну так а кто же обкатывать будет если все отказываться будут в пользу буста ?
GbaLog-
Любитель чаепитий
2712 / 1245 / 301
Регистрация: 24.08.2014
Сообщений: 4,455
Записей в блоге: 1
Завершенные тесты: 2
01.09.2016, 12:17 #28
Avazart, Не знаю, может быть тестеры какие-нибудь есть.
qppq
11 / 11 / 1
Регистрация: 31.08.2016
Сообщений: 160
Завершенные тесты: 1
01.09.2016, 13:37  [ТС] #29
Цитата Сообщение от Avazart Посмотреть сообщение
Вместо typename- typeid т.е. целое, а не строка.
typeid это глобальный тип или что это, и если меньше чар, то сколько весит?
Avazart
Эксперт С++
7152 / 5329 / 278
Регистрация: 10.12.2010
Сообщений: 23,585
Записей в блоге: 17
01.09.2016, 13:54 #30
Цитата Сообщение от qppq Посмотреть сообщение
typeid это глобальный тип или что это, и если меньше чар, то сколько весит?
Зависит от реализации. Т.е как реализуешь так и будет.
В данном случае я имел не глобальный тип и имя поля структуры int typeid.

А вообще есть такое:
http://ru.cppreference.com/w/cpp/language/typeid
http://ru.cppreference.com/w/cpp/types/type_info
http://ru.cppreference.com/w/cpp/types/type_index
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.09.2016, 13:54
Привет! Вот еще темы с ответами:

Какой STL-контейнер выбрать? - C++
Приветствую! Мне нужно выбрать STL-контейнер (C++11), для хранения элементов по ключу. Типа ключа - std::string, элемент - указатель...

Какой контейнер STL выбрать? - C++
Во входном потоке (FILE*) дано множество точек. Найти пару точек, расстояние между которыми минимально. Ввод и вывод в произвольной форме....

STL контейнер. Не записывает int - C++
class book {int a;};//Конструктор есть и работает Допустим есть список list<book> lst; Передаём этот список функции, точнее ссылку на...

Map, List, работа со ссылками на экземпляры классов - C++
Здравствуйте! Есть такой вопрос: если ли разница в том, каким образом делать .push_back(buf) в список listOfFreinds ? Я представил там оба...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.09.2016, 13:54
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru