ФлеймФорумПрограммирование

Покажите свой базовый класс

Страницы: 1 2 39 10 Следующая »
#0
13:28, 16 авг 2011

Решил сделать базовый класс для всех игровых классов интерфейсом вида:

class IEntity
{
protected:

   virtual ~IEntity(void)
   {
   }

   virtual void destroy(void) = 0;

public:

   virtual bool valid(void) const = 0;
   virtual unsigned int referenceCount(void) const = 0;
   virtual unsigned int retain(void) = 0;
   virtual unsigned int release(void) = 0;
   virtual int compare(const IEntity* other) const = 0;

   template<typename T> static void bind(T& dst, IEntity* src)
   {
      if (src != NULL)
      {
         src->retain();
      }

      if (dst != NULL)
      {
         dst->release();
      }

      dst = (T)src;
   }
};

Как можно заметить данный класс немного схож с IUnknown (в плане подсчета ссылок).
Также он содержит методы:
1) valid - предназначен для проверки состояния объекта (например если у нас объект является текстурой, то данный метод вернет true только если текстура создана, имеет корректный формат и размеры).
2) compare - позволяет сравнивать два объекта по некоторым аттрибутам, возвращает -1 если this < other, 1 если this > other и 0 если они равны.
3) bind - удобный метод для безопасного создания ссылки на объект (правда название bind не очень нравится).

Думаю у многих тут (которые пишут свои игры) есть нечто подобное, предлагаю показать и обсудить свои творения )

#1
13:32, 16 авг 2011

nes
ты уверен что этот класс вообще нужен?

#2
13:39, 16 авг 2011
    struct IBase
    {
    };

=)

#3
13:43, 16 авг 2011

Pushkoff
Конечно, он удобен, ну по крайней мере в плане подсчета ссылок на объект, я это понял после того как увидел что такое Obj-C, это действительно удобно, попробуй )

berserkovich
А что у него внутри, меня больше всего внутренности интересуют )

#4
13:49, 16 авг 2011

nes
> Конечно, он удобен, ну по крайней мере в плане подсчета ссылок на объект
зачем их считать? может лучше ты бы выбрал шарп или яву?

призываю иннуэндо!!

#5
13:50, 16 авг 2011

nes
> А что у него внутри, меня больше всего внутренности интересуют )
ничего. это весь класс =)

#6
13:52, 16 авг 2011

Pushkoff
>зачем их считать?
Чтобы лишний раз не думать о том, что на объект еще будут ссылаться другие объекты после его удаления.

>может лучше ты бы выбрал шарп или яву?
Может, с явой не знаком, с шарпом три года назад работал, совсем немного и уже не помню его совсем.
В этих языках есть что-то удобнее рефкаунтера?

#7
13:54, 16 авг 2011

nes
> В этих языках есть что-то удобнее рефкаунтера?
да, сборщик мусора

nes
> Чтобы лишний раз не думать о том, что на объект еще будут ссылаться другие
> объекты после его удаления.
если не хочется думать, может перестать быть программистом?

#8
13:55, 16 авг 2011

nes
и для этих целей есть shared_ptr которому не нужны базовые классы

#9
14:07, 16 авг 2011

Pushkoff
>да, сборщик мусора
Если объект был удален а другой объект после смерти первого пытается к нему обратиться, как тут поможет сборщик мусора?

>и для этих целей есть shared_ptr которому не нужны базовые классы
Стараюсь не злоупотреблять шаблонами, обычно использую только в методах и функциях, да и запись вида ITexture* texturePtr, как-то приятнее чем shared_ptr<Texture> texturePtr

#10
14:19, 16 авг 2011

Pushkoff
> зачем их считать?

точно, ничего считать не надо - всё уже подсчитано до нас

> призываю иннуэндо!!

я не поддаюсь на провокации :)

#11
14:54, 16 авг 2011

nes
> Покажите свой базовый класс
void

#12
14:57, 16 авг 2011
Изображение
#13
15:19, 16 авг 2011
facepalm | Покажите свой базовый класс
#14
16:47, 16 авг 2011

Drazd
что это?

Страницы: 1 2 39 10 Следующая »
ФлеймФорумПрограммирование

Тема в архиве.