![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| haword |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 21.10.2004 Репутация: нет Всего: 3 |
Такая задача встала, может кто сталкивался с такой. Надо создать список содержащий различные классы, никак не могу придумать как это сделать
class Pervyi { public: string name; string type; } class Vtoroi { public: string name; string type; } List.AddClass(Pervyi); List.AddClass(Vtoroi); как вот этот лист реализовать? Есть может какие стандартные функции для этого? |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Добавляй в список указатели на объекты, а не сами объекты:
А перед тем, как начинать изобретать свой велосипед... простите, список -- я бы посоветовал заглянуть в С++ FAQ, тема "Об STL простыми словами - Динамические массивы, списки и т.п.". -------------------- ![]() |
|||
|
||||
| haword |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 21.10.2004 Репутация: нет Всего: 3 |
втот то весь и прикол что при STL пишется примерно так:
class a {}; class b{}; vector<a> list или vector<b> list а надо и а класс и b класс в один список добавлять, в том и проблема |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
тут несколько другой вопрос: создать список именно классов
здесь можно попробовать такой подход: 1. все классы должны наследоваться от одного 2. создается список не классов, а "фабрик" под фабрикой класса здесь понимается функция, которая создает объект с параметрами по умолчанию -------------------- qqq |
|||
|
||||
| Mad |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Эксперт Сообщений: 656 Регистрация: 18.10.2004 Где: Одесса Репутация: 7 Всего: 19 |
haword
Если ты просто накидаеш разные классы в обин список, то как ты потом их разбирать будеш А если у класов есть чтото общее (например родительский класс) то просто делаеш список из родителей |
|||
|
||||
| chipset |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Можно реализовать на коленке RTTI, то есть встроить в базовый класс object имя типа..
Базовый object.. --------------------
|
||||||
|
|||||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
вообще, лучше бы чуть полнее описать задачу на уровень выше (т.е. зачем понадобился список классов), тогда помощь может оказаться более эффективной...
-------------------- qqq |
|||
|
||||
| haword |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 21.10.2004 Репутация: нет Всего: 3 |
Спасибо за ответы! Сделал так
выводит только b.Proba, b.a не сохраняется, забываются значения класса Child Это сообщение отредактировал(а) haword - 22.10.2004, 09:10 |
|||
|
||||
| bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
не, не очень. лучше хранить поинтеры на объекты, а не сами объекты. потом проблеммы с конструктором копий начнуться
|
|||
|
||||
| haword |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 21.10.2004 Репутация: нет Всего: 3 |
как? |
|||
|
||||
| bel_nikita |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
Вроде так |
||||
|
|||||
| haword |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 21.10.2004 Репутация: нет Всего: 3 |
а если я потом классы а и b удаляю то в списке указатель этот класс тоже ведь летит так? а мне хранить их надо
Это сообщение отредактировал(а) haword - 22.10.2004, 14:10 |
|||
|
||||
| bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
hawordага.
Если удаляешь объекты, то удаляй и поитеры на них из списка. Ворочать укзателями намного эффективнее, нежели целыми объектами.
я тож поддерживаю эту идею |
|||
|
||||
| Guest |
|
|||
|
Unregistered |
Огромное спасибо за советы! Моя задача была такова!
1. Есть класс - папа. 2. У него есть некий набор виртуальных ф-ций (допустим, GetType) 3. Есть у него дети, каждый из которых как накрывает виртуальный ф-ции (например, реализует свой GetType), так и имеет свои Задача - нужен класс - контейнер (типа std::Array), чтобы в него можно было запихивать любого из детей. Я скланяюсь к использованию boost::any типа std::vector< boost::any<Roditel> > v, думаю это наиболее правильное решение или нет? Хотя в принципе не хотелось бы лишнюю либу (тот же boost), если можно обойтись своими силами и STL |
|||
|
||||
| Mad |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Эксперт Сообщений: 656 Регистрация: 18.10.2004 Где: Одесса Репутация: 7 Всего: 19 |
Не знаю что тут лучше std::vector или std::list, зависит от того, что ты дальше с этим списком делать будеш.
непонятно зачем тебе тут boost::any<Roditel> std::vector<Roditel> нормально работает |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |