C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Type générique (enfin je crois)

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Geoffroy Baud
Guest





PostPosted: Tue Aug 17, 2004 8:59 am    Post subject: Type générique (enfin je crois) Reply with quote




Bonjour,
comment puis-je faire un type générique,
je vous explique, je suis entrain de faire
un ptit programme, qui est sensé afficher
des images, je dois geré évidemment
plusieur type d'image, jpeg, jpeg2000 dicom3, tiff, etc.

J'ai donc fais plusieur class (une par type d'image).
Elles héritent toutes d'un class abstraite image
qui contient une methode vituel pur, "decode"
qui comme son nom l'indique decode l'image et me
retoure le raw (const char*).

Le problème c'est que je dois connaitre le type
de l'image pour pouvoir l'instancier.

connaisser vous un moyen, pour faire en sorte que
je puisse directement lui passer un pointeur
sur l'image (void*) sans avoir a me soucier de sont
type(reel) et qu'elle me retourne le bonne objet.

par exemple:


void* monimage -> type_generique -> (test) -> c'est un jpeg
retour jpeg*

je ne sais si je suis claire, dans le cas contraire je donnerais
des précisions.


d'avance un grand merci.

--
GB
Back to top
Jean-Marc Bourguet
Guest





PostPosted: Tue Aug 17, 2004 9:49 am    Post subject: Re: Type générique (enfin je crois) Reply with quote



Geoffroy Baud <geff (AT) poulpe (DOT) openway.ch> writes:

Quote:
je ne sais si je suis claire, dans le cas contraire je donnerais des
précisions.

Pas trop. Recherche "constructeurs virtuel" et "idiome
lettre/enveloppe", c'est deux choses auxquelles ta description de
probleme me fait penser, mais je ne sais pas laquelle est la solution
a ton probleme ou s'il a des caracteristiques qui rendent necessaire
une autre.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Back to top
Cyrille Karmann
Guest





PostPosted: Tue Aug 17, 2004 9:56 am    Post subject: Re: Type générique (enfin je crois) Reply with quote



Geoffroy Baud <geff (AT) poulpe (DOT) openway.ch> disait:
Quote:

je ne sais si je suis claire, dans le cas contraire je donnerais
des précisions.

Pas sur d'avoir tout compris. Est-ce que le code qui suit répondrait à
ton problème?

class Image
{
// tout un bazard...

public:
static Image * createImage(void *);
};

Image * createImage(void *data)
{
if (c_est_un_jpeg(data))
return new JPEGImage(data);
else if (c_est_un_png(data))
return new PNGImage(data);

// etc.
}

--
Cyrille

Back to top
Loïc Joly
Guest





PostPosted: Tue Aug 17, 2004 10:30 am    Post subject: Re: Type générique (enfin je crois) Reply with quote

Geoffroy Baud wrote:

Quote:
Bonjour,
comment puis-je faire un type générique,
je vous explique, je suis entrain de faire
un ptit programme, qui est sensé afficher
des images, je dois geré évidemment
plusieur type d'image, jpeg, jpeg2000 dicom3, tiff, etc.

J'ai donc fais plusieur class (une par type d'image).
Elles héritent toutes d'un class abstraite image
qui contient une methode vituel pur, "decode"
qui comme son nom l'indique decode l'image et me
retoure le raw (const char*).

Le problème c'est que je dois connaitre le type
de l'image pour pouvoir l'instancier.

connaisser vous un moyen, pour faire en sorte que
je puisse directement lui passer un pointeur
sur l'image (void*) sans avoir a me soucier de sont
type(reel) et qu'elle me retourne le bonne objet.

Je ne vois pas trop ce que souhaite faire. D'où vien ce void* ? Qui l'a
crée ? A priori, c'est ça que tu dois modifier pour qu'il crée un objet
du bon type. Par exemple, quand ton utilisateur choisi d'ouvrir
toto.jpg, tu peux créer un objet du type jpeg, éventuellement avec une
fonction factory (version simpliste) :

image *createImage(string filename)
{
string extension = extractExtension(fileName);
if(extension == "jpg")
return new jpeg(filename);
if(extension == "tif")
return new tiff(filename);
}


Enfin, j'aurais tendance à avoir une structure de classe différente, car
ce qui différencie un jpeg d'un tiff, c'est uniquement la
lecture/écriture dans un fichier, une fois chargé, c'est pareil, et de
plus, on veut pouvoir lire une image en jpeg et l'enregistrer en tiff,
sans forcément dupliquer l'image en mémoire.

J'aurais donc une classe image sans héritage, une classe abstraite
fileReader et une autre fileWriter, toutes deux dérivées en fonction des
formats (par exemple, fileWriter aurais une fonction virtuelle pure
permettant d'afficher une boîte de dialogue avec les options de
sauvegarde spécifiques à un type), et image utiliserait ces deux classes.

--
Loïc


Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.