如何将智能指针与 Allegro 位图一起使用?
How to use use smart pointers with Allegro Bitmaps?
我已经厌倦了决定哪些 classes 负责删除哪些位图。我试图重写我的代码以将智能指针与自定义删除器一起使用 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'
解决我的问题的其他解决方案是创建一个位图 class 来包装所有 Allegro 内容,但这看起来很难看,我认为我不应该这样做。另外,我已经在各处使用了其他快板函数,然后我想为 ALLEGRO_SAMPLE
和 ALLEGRO_FONT
编写相同类型的 classes。我真的不想那样做。
如何将智能指针与 Allegro 位图一起使用?
编辑:也许为了让非 Allegro 编码人员了解 ALLEGRO_BITMAPs 的工作原理,我将 post 下面的一些代码
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
returns 指向完全构造的对象的指针,因此您不想调用任何构造函数(智能指针构造函数除外)。
我已经厌倦了决定哪些 classes 负责删除哪些位图。我试图重写我的代码以将智能指针与自定义删除器一起使用 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'
解决我的问题的其他解决方案是创建一个位图 class 来包装所有 Allegro 内容,但这看起来很难看,我认为我不应该这样做。另外,我已经在各处使用了其他快板函数,然后我想为 ALLEGRO_SAMPLE
和 ALLEGRO_FONT
编写相同类型的 classes。我真的不想那样做。
如何将智能指针与 Allegro 位图一起使用?
编辑:也许为了让非 Allegro 编码人员了解 ALLEGRO_BITMAPs 的工作原理,我将 post 下面的一些代码
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
returns 指向完全构造的对象的指针,因此您不想调用任何构造函数(智能指针构造函数除外)。