1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| enum eType
{
tTXT, //ressources "Texte"
tXML, //ressource "XML"
tMP3, //ressource "MP3"
tGIF, //ressource "gif"
tJPG, //ressource "jpeg"
/*...*/
};
/*modifions l'interface en conséquence */
class Ressource
{
public:
/*pour une ressource générale, tout ce qu'on connait, c'est son nom */
Ressource(const std::string& mnom, etype tt):mnom(mnom),mtype(tt){}
virtual ~Ressource(){}
virtual void chargerRessource() = 0;
virtual void utiliserRessource(/*paramètres éventuels */) = 0;
const std::string& nom() const{return mnom;}
etype ressourceType() const{return mtype;}
private:
std::string mnom;
etype mtype;
};
/* et le constructeur des ressources concrète sous une forme proche de */
RessourceTXT::RessourceTXT(const std::string& mnom):
Ressource(mnom,tTXT)
{
}
RessourceXML::RessourceXML(const std::string& mnom):
Ressource(mnom,tXML)
{
}
/*...*/
void uneFonction(RessourceTXT* r)
{
/*fonction propre aux ressources texte par exemple*/
std::cout<<"cette fonction s'applique a un fichier texte"<<std::endl;
}
void uneFonction(RessourceXML* r)
{
/*fonction propre aux ressources texte par exemple*/
std::cout<<"cette fonction s'applique a un fichier XML"<<std::endl;
}
/* et une fonction pour mettre tout cela en oeuvre: */
void lafonctionFinale(const std::string& lenom)
{
Ressource* res=GestionnaireRessource::getInstance()->trouveRessource(lenom);
switch(res->ressourceType())
{
case tTXT:
uneFonction(static_cast<RessourceTXT*>(res));
break;
case tXML:
uneFonction(static_cast<RessourceXML*>(res));
break;
/*...*/
default:
break;
};
} |
Partager