Я решил, что устал решать, какие классы отвечают за удаление растровых изображений. Я попытался переписать свой код, чтобы использовать интеллектуальные указатели с пользовательским средством удаления 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'
Другими решениями для решения моей проблемы было бы создание класса Bitmap для обертывания всего материала Allegro, но это кажется уродливым, и я не думаю, что мне нужно это делать. Плюс я уже везде использую другие allegro функции, а то хотелось бы потом написать те же типы классов для ALLEGRO_SAMPLE
и ALLEGRO_FONT
. Мне действительно не хочется этого делать.
Как использовать интеллектуальные указатели с растровыми изображениями Allegro?
Изменить: возможно, чтобы дать кодировщикам, не использующим Allegro, представление о том, как работают ALLEGRO_BITMAP, я опубликую небольшой код ниже.
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.