Обработка зависимостей между образцами мостов

Я пытаюсь разработать простую настольную игру, которая должна работать с различными библиотеками GUI, которые можно изменять во время выполнения. Идея состоит в том, что я хочу иметь несколько классов, каждый из которых имеет объект изображения, представляющий объекты этого класса. Но поскольку каждая библиотека выбирает обтекание изображений в классах, специфичных для этой библиотеки, я должен написать мостовую иерархию, чтобы абстрагировать любые особенности реализации. Что-то вроде этого

class myImageInt{
// common pure virtual methods that I want my image implementation to define
}

class myImageImpA : myImageInt{
libAImg img;
libAImg getLibraryImp(){ return img;}
// provide definition for common interface in terms of libAImg functions
}

class myImageImpB: myImageInt{
libBImg img;
libBImg getLibraryImp(){ return img;}
// provide definition for common interface in terms of libBImg functions
}

И тогда мне, конечно, также придется использовать мостовую иерархию для типов библиотек, которые на самом деле будут обрабатывать окна и рисование

class myScreenInt{
void drawImage(myImageInt& img) = 0;
// common methods for drawing onto a window
}

class myScreenImpA : myScreenint{
libAScreen scrn;
void drawImage(myImageInt& img){
// pass the actual library specific object to the libAScreen  so that the image can be drawn
}
// provide definition for common interface in terms of libAScreen functions
}

class myScreenImpB : myScreenint{
libBScreen scrn;
void drawImage(myImageInt& img){
// pass the actual library specific object to the libBScreen  so that the image can be drawn
}
// provide definition for common interface in terms of libBScreen functions
}

Но проблема в том, что для того, чтобы нарисовать изображение в окне, мне нужно вызвать drawImage метод на одном из scrn объектам, и эти объекты нуждаются в объектах изображений, специфичных для их конкретной реализации (т.е. объекты типа libAImg и LibBImg). В любом случае можно ли достичь этой формы независимости библиотеки, не приводя к небезопасному типу? static_cast или дорогой dynamic_cast бросить дерево наследования и вызвать getLibraryImp метод с типом возврата, который специфичен для этой реализации?

    void myScreenImpA::drawImage(myImageInt& img){
scrn.drawImage(static_cast<myImageImplA&>(img).getImpl()); //type unsafe cast
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …