我已经决定我厌倦了决定哪些类负责删除哪些位图。我试图重写我的代码,使用智能指针与自定义删除al_destroy_bitmap
我的代码很简单。
shared_ptr<ALLEGRO_BITMAP> test = make_shared<ALLEGRO_BITMAP>(al_load_bitmap("hello.png"), al_destroy_bitmap);
我得到了相当多的错误,我只是似乎无法解决。
error C2079: 'std::_Get_align<ALLEGRO_BITMAP>::Elt2' uses undefined struct 'ALLEGRO_BITMAP'
error C2079: 'std::_Get_align<ALLEGRO_BITMAP>::Elt0' uses undefined struct 'ALLEGRO_BITMAP'
error C2027: use of undefined type 'ALLEGRO_BITMAP'
error C2027: use of undefined type 'ALLEGRO_BITMAP'
解决我的问题的其他解决方案是创建一个位图类来包装所有的Allegro的东西,但这看起来很丑,我不认为我应该这样做。加上我已经在各处使用了其他快板函数,然后我想为ALLEGRO_SAMPLE
和ALLEGRO_FONT
编写相同类型的类。我真的不想做那件事。
我如何使用智能指针与Allegro位图?
编辑:也许给非allegro编码人员ALLEGRO_BITMAPs是如何工作的感觉,我将在 下面发布一小段代码ALLEGRO_BITMAP *test = al_load_bitmap("hello.png") // This works
ALLEGRO_BITMAP test1; // This fails with error C2079 undefined struct ALLEGRO_BITMAP. I expect this here.
像这样:
std::shared_ptr<ALLEGRO_BITMAP> test(al_load_bitmap("hello.png"), al_destroy_bitmap);
记住:make_shared
和make_unique
调用new
,你不希望在这里。
make_x<T>
构造类型为T
的对象,将给定的参数传递给T
的构造函数。但是al_load_bitmap
返回一个指向完全构造对象的指针,所以你不想调用任何构造函数(除了智能指针构造函数)。