如何使用使用智能指针与Allegro位图
How to use use smart pointers with Allegro Bitmaps?
我已经决定我厌倦了决定哪些类负责删除哪些位图。我试图重写我的代码,使用智能指针与自定义删除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
返回一个指向完全构造对象的指针,所以你不想调用任何构造函数(除了智能指针构造函数)。
相关文章:
- C / C++ 移位/偏移/向左或向右移动位图?
- 如何在快板的屏幕中显示子位图的绘制?
- CreateDIBSection为同一图像返回不一致的位图位值
- C++ 位图中的 ttc 字体
- 使用 GDI+ 旋转位图,然后转换为 HDC
- 难以从 CImageList 设置菜单项位图
- 如何将位图拉伸到父面板(wxWidgets 自定义)
- 如何使用 freetype2 访问单色位图中的像素状态
- 将位图 (bmp) 转换为具有透明度的 png (Windows c++)
- 安卓工作室 |CPP 文件错误错误: 位图库中对"AndroidBitmap_unlockPixels"的未定义引用
- 位图到垫子/2D 数组
- Gdiplus位图没有Alpha通道
- 如何从路径字符串加载Gdiplus::位图
- 在C++中使用Gdiplus创建透明位图
- 用C++压缩内存中的位图
- C++gdi::内存中的位图到PNG图像
- Allegro 5如何绘制缩放位图区域
- C++ Allegro 位图子类
- 如何使用使用智能指针与Allegro位图
- C++(Allegro Library)位图二维数组问题