Структура порта для класса - PullRequest
0 голосов
/ 28 июня 2011

Я использую платформу Allegro 5.Когда мне нужно создать очередь событий, я должен вызвать 'al_create_event_queue' и проверить наличие ошибок, а также уничтожить ее 'al_destroy_event_queue'.Так как это один и тот же механизм, который я должен использовать для каждого создаваемого объекта, он довольно скучный.

Мой вопрос: есть способ «портировать» структуру на класс, чтобы конструкторmy_event_queue фактически вызывает 'al_create_event_queue', а деструктор вызывает 'al_destroy_event_queue'?Если нет, то как я могу отслеживать объекты, созданные этими функциями, чтобы они автоматически удалялись, когда мой класс основного обработчика «Игра» разрушен?

Ответы [ 2 ]

1 голос
/ 28 июня 2011

Да.Вы делаете именно то, что вы сказали.Вы, кажется, поняли это для себя.

Однако вам необходимо убедиться, что вы правильно обрабатываете копирование.Вам следует либо запретить копирование этого объекта (через что-то вроде boost :: noncopyable), либо вы должны написать конструктор копирования и оператор присваивания для него.Теперь очереди событий Allegro не подлежат копированию (для этого нет функции Allegro), поэтому вам, вероятно, следует просто запретить копирование.

Если у вас есть доступ к C ++ 0x, конструктор move и оператор присваивания перемещения будет в порядке.

0 голосов
/ 28 июня 2011

Конечно, вы можете ... просто поместить код для создания структуры в конструктор и код для ее удаления в деструкторе.

struct MyQueue {
  MyQueue() : queue(al_create_event_queue() { }
  ~MyQueue() { al_destroy_event_queue(queue); }

  ALLEGRO_EVENT_QUEUE* queue;

private:
  MyQueue(const MyQueue&);
  MyQueue& operator =(MyQueue);
};

Обратите внимание, что вы не можете сделать слишком много, чтобы обернуть эти типы ... вы столько раз обмениваетесь этими указателями в коде Allegro, что вам в основном приходится показывать объект queue, лежащий в основе этого мира..

...