C++ 端口结构到类

C++ 端口结构到类,c++,class,struct,allegro5,C++,Class,Struct,Allegro5,我使用的是Allegro 5框架。当我需要创建一个事件队列时,我必须调用'al_create_event_queue'并检查错误,然后销毁它'al_destroy_event_queue'。由于创建每个对象都必须使用相同的机制,因此非常无聊 我的问题是:有一种方法可以将一个结构“移植”到一个类中,这样我的事件队列的构造函数实际上调用“al_创建事件队列”,析构函数调用“al_销毁事件队列”? 如果没有,我如何跟踪这些函数创建的对象,以便在我的“游戏”主处理程序类被销毁时自动删除它们?是。你完全按

我使用的是Allegro 5框架。当我需要创建一个事件队列时,我必须调用'al_create_event_queue'并检查错误,然后销毁它'al_destroy_event_queue'。由于创建每个对象都必须使用相同的机制,因此非常无聊

我的问题是:有一种方法可以将一个结构“移植”到一个类中,这样我的事件队列的构造函数实际上调用“al_创建事件队列”,析构函数调用“al_销毁事件队列”?
如果没有,我如何跟踪这些函数创建的对象,以便在我的“游戏”主处理程序类被销毁时自动删除它们?

是。你完全按照你说的去做。你似乎已经为自己想出了这个办法

但是,您需要确保正确处理复制。您应该禁止复制这个对象(通过类似boost::noncopyable的方式),或者应该为它编写一个复制构造函数和复制赋值操作符。现在,Allegro事件队列是不可复制的(没有Allegro函数),所以您可能应该禁止复制


如果您有权访问C++0x,则可以使用移动构造函数和移动赋值运算符。

当然可以。。。只需将创建结构的代码放在构造函数中,将删除结构的代码放在析构函数中

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
对象。

原型是“Allegro\u EVENT\u queue*al\u create\u EVENT\u queue()”。如何将Allegro\u EVENT\u queue和MyQueue数据类型匹配在一起?我的意思是,我想通过传递MyQueue来调用需要ALLEGRO_EVENT_队列结构的函数。。。变量末尾的“&”和“运算符”代表什么?(对不起,我来自python!)@Silver:如果你来自python,这不是你需要做的。你需要学习C++是如何工作的;你不能只在C++中跳过游戏开发而不熟悉语法。@ Simul:我更新了修复实际的界面,但是我倾向于同意Nicol。通过C++学习C++并不像某些语言那样有效。用快板来做这件事更糟。。。这是一个C库,它是用C++编译器编译的,你会从代码中找出与之接口的坏习惯。Dennis Zickefoose:谢谢你的帮助。你能给我推荐一个关于C/C++(尽可能完整)的好参考吗?@Dennis Zickefoose:再次谢谢你你说的“复制”是什么意思?