Прямо сейчас мой графический интерфейс абстрактен и в основном имеет класс Bitmap, который содержит пустоту * по отношению к собственному типу растрового изображения. Это работает так: у меня есть загрузчик абстрактных растровых изображений, который возвращает пустой указатель на данные изображения с заданной строкой пути. загрузчик является статическим указателем в типе данных Bitmap и устанавливается пользователем для любого используемого бэкэнда. Класс Graphics является абстрактным, и указатель на него запрашивается классом Gui. Когда бэкэнд для класса Graphics рисует изображение, он делает что-то вроде этого:
void Allegro5GraphicsManager::drawImage( const Bitmap &bmp,
const Point &position,
const Point ®ionStart,
const Dimension ®ionSize,
const float &opacity /*= 1.0f*/ )
{
al_draw_tinted_bitmap_region((ALLEGRO_BITMAP*)bmp.getBitmap(),
al_map_rgba_f(opacity,opacity,opacity,opacity),
regionStart.getX(),regionStart.getY(),
regionSize.getWidth(),regionSize.getHeight(),
position.getX() + getOffset().getX(),position.getY() + getOffset().getY(), 0);
}
Так что, как вы можете видеть, просто тип бросает пустоту * в то, что ему нужно.
Проблема в том, что я слышал, что void * не очень хорошая идея в C ++.
Другое решение, о котором я подумал, - это что-то вроде Allegro5Bitmap, которое наследуется от Bitmap.
Проблема, с которой я столкнулся при использовании этого метода, заключалась в том, что пользователю пришлось бы намазать Allegro5Bitmap по всему коду. И это опровергает концепцию моего API, которая предназначена для переноса всего кода, написанного для переноса на другие серверные части, такие как sdl и т. Д., Путем простой инициализации класса Gui с помощью указателей менеджера sdl.
Что я мог сделать?
Спасибо