Re: Хранение в контейнере объектов разного типа
От: Аноним  
Дата: 25.11.11 07:40
Оценка:
http://doc.qt.nokia.com/stable/<b>qvariant</b>.html ?
Re: Хранение в контейнере объектов разного типа
От: TimurSPB Интернет  
Дата: 29.11.11 17:05
Оценка: 1 (1)
А у комады много параметров?
Если мало и одного типа то просто сделать

struct Command
{
  Type type_;
  ArgType arg1;
  ArgType arg2;
  etc..
}

И всё это в контейнер запихать и не городить огород.
Make flame.politics Great Again!
Re[4]: Хранение в контейнере объектов разного типа
От: Tpyn666  
Дата: 30.11.11 09:05
Оценка:
Здравствуйте, johny5, Вы писали:

J>Избавиться от void*


Нет возможности избавиться от void*. Так как классы все разные и не связаны с друг другом.

Не подскажите мне это коретно освободить память.
FooClass* lpObj = new FooClass();
size_t sizeObj = sizeof(FooClass);

delete[sizeObj]  lpObj;


Если учесть то что FooClass не использует ссылочных типов.
Re[5]: Хранение в контейнере объектов разного типа
От: johny5 Новая Зеландия
Дата: 30.11.11 09:31
Оценка:
T>Нет возможности избавиться от void*. Так как классы все разные и не связаны с друг другом.

Ну как, есть куча способов это побороть:
1. Отнаследовать их все от общего предка с виртуальным деструктором. Т.е. у вас Command должна быть имплементирована так, как у топикстартера.
2. Контейнеры для перечисленных типов boost::variant
3. Контейнеры для любых типов boost::shared_ptr, boost::any



T>Не подскажите мне это коретно освободить память.

T>
T>FooClass* lpObj = new FooClass();
T>size_t sizeObj = sizeof(FooClass);

T>delete[sizeObj]  lpObj;
T>


T>Если учесть то что FooClass не использует ссылочных типов.


Вам нужно отходить от фокусов с памятью и переходить на типобезопасное программирование.
Re[6]: Хранение в контейнере объектов разного типа
От: Tpyn666  
Дата: 01.12.11 07:51
Оценка:
Здравствуйте, johny5, Вы писали:

J>Ну как, есть куча способов это побороть:

J> 1. Отнаследовать их все от общего предка с виртуальным деструктором. Т.е. у вас Command должна быть имплементирована так, как у топикстартера.
J> 2. Контейнеры для перечисленных типов boost::variant
J> 3. Контейнеры для любых типов boost::shared_ptr, boost::any
J>Вам нужно отходить от фокусов с памятью и переходить на типобезопасное программирование.

Если честно я даже не думал в этом направление. Основной задачей для меня было только не засорять кучу.

vod* lpObj = new FooClass();
size_t sizeObj = sizeof(FooClass);

delete[sizeObj]  lpObj;


Если бы этот кусок кода точно правильно удалял объект то я бы на нем и остановился. Так как проект не очень большой и вообще VC++ использую только для связи между C# и native OpenGL.
Re[7]: Хранение в контейнере объектов разного типа
От: johny5 Новая Зеландия
Дата: 01.12.11 09:36
Оценка:
T>Если бы этот кусок кода точно правильно удалял объект то я бы на нем и остановился. Так как проект не очень большой и вообще VC++ использую только для связи между C# и native OpenGL.

Ну тогда тебе тяжело будет имплементировать порт самому. Может заюзать чтонть готовое?
Re[8]: Хранение в контейнере объектов разного типа
От: Tpyn666  
Дата: 02.12.11 08:56
Оценка:
Здравствуйте, johny5, Вы писали:

J>Ну тогда тебе тяжело будет имплементировать порт самому. Может заюзать чтонть готовое?


Нет задача очень специфична и конкретна. OpenGL + Media Foundation. Да и собственно задача уже выполнена просто код чищу.
Re[7]: Хранение в контейнере объектов разного типа
От: jazzer Россия Skype: enerjazzer
Дата: 02.12.11 09:18
Оценка:
Здравствуйте, Tpyn666, Вы писали:

J>> 2. Контейнеры для перечисленных типов boost::variant

J>>Вам нужно отходить от фокусов с памятью и переходить на типобезопасное программирование.

T>Если честно я даже не думал в этом направление. Основной задачей для меня было только не засорять кучу.


Если кучу и несвязанные классы, то используй boost::variant< Class1, Class2, Class3, ... >.
http://boost.org/libs/variant
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.