2010-11-05 3 views
-1

Я делаю игру gui api. Он будет работать как с Allegro, так и с SDL. Я использую полиморфизм для ввода и рисования растровых изображений. Проблема связана с этими тремя типами: битмапом, шрифтом и цветом. SDL и Allegro отличаются от них. Проблема в том, что я не могу использовать здесь полиморфизм из-за разных типов возвращаемых данных. Я бы не хотел иметь пустоту * в качестве возвращаемого типа. То, что я мог бы сделать вместо того, чтобы пользователь мог просто сделать:Класс с несколькими типами возврата?

AGBitmap bmp = AGBitmap("someimage.png"); 
graphics->draw(bmp); 

Сейчас моя AGBitmap работает только с Allegro и имеет перегруженный оператор = и управляет памятью, так что пользователю не придется.

Что мне делать?

Благодаря

+4

На StackOverflow много вопросов. Если вы хотите, чтобы люди, которые могли ответить на ваш вопрос, чтобы найти его, вам нужно будет сделать лучше по названию. –

+5

Вы могли бы подумать, что он знал лучше после 3 килотонов. – Squirrelsama

+0

Функции возвращают вещи, а не классы. – Qwertie

ответ

0

Поскольку существуют разные типы, вы должны использовать специализированную специализацию.

template < typename WinManagerType > 
class AGBitmap; 

template<> 
class AGBitmap<AlegroWinType> 
{ 
public : 
    //... 
    AlegroBitmapType GetBitmap(); 
}; 

template<> 
class AGBitmap<SdlWinType> 
{ 
public : 
    //... 
    SdlBitmapType GetBitmap(); 
}; 

Но так как ваш вопрос настолько расплывчатый, может быть лучшее решение.

0

CRTP могут быть полезны в этом случае, если вы можете абстрактный общий интерфейс для соответствующих конкретных классов в шаблон (ы) базового класса.

template <class BITMAP> class MyBitmap 
{ 
    // generic bitmap interface 
}; 

class MyAGBitmap : MyBitmap<AGBitmap> 
{ 
};