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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jean-Marc Bourguet
Geoffroy Baud writes:
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
Geoffroy Baud <geff@poulpe.openway.ch> writes:
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
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
Cyrille Karmann
Geoffroy Baud disait:
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
Geoffroy Baud <geff@poulpe.openway.ch> disait:
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);
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
Loïc Joly
Geoffroy Baud wrote:
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) :
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
Geoffroy Baud wrote:
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) :
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.
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) :
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.