2010-11-05 5 views
-1

Je fais un jeu gui api. Cela fonctionnera avec Allegro et SDL. J'utilise le polymorphisme pour l'entrée et le dessin bitmap. Le problème vient avec ces 3 types: bitmap, police et couleur. SDL et Allegro sont différents sur ces points. Le problème est que je ne peux pas vraiment utiliser le polymorphisme ici en raison de différents types de retour. Je n'aurais pas le droit d'avoir un vide * comme type de retour. Que pouvais-je faire à la place afin que l'utilisateur pourrait tout faire:Classe avec plusieurs types de retour?

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

En ce moment, mon AGBitmap fonctionne avec seulement Allegro et a une surcharge = opérateur et gère sa mémoire afin que l'utilisateur ne doit pas.

Que pouvais-je faire?

Merci

+4

Il y a beaucoup de questions sur StackOverflow. Si vous voulez que les personnes qui répondent à la vôtre puissent le trouver, vous devrez faire mieux sur le titre. –

+5

On pourrait penser qu'il savait mieux après 3 kilopoints – Squirrelsama

+0

Les fonctions retournent des trucs, pas des cours. – Qwertie

Répondre

0

Étant donné qu'il existe différents types, vous devez utiliser la spécialisation de modèle.

template < typename WinManagerType > 
class AGBitmap; 

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

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

Mais puisque votre question est si vague, il pourrait y avoir une meilleure solution.

0

CRTP pourraient être utiles dans ce scénario, à condition que vous pouvez abstraite d'une interface commune pour les classes concrètes pertinentes dans votre modèle de classe de base (s).

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

class MyAGBitmap : MyBitmap<AGBitmap> 
{ 
}; 
Questions connexes