Methode template intelligente - C++ - Programmation
Marsh Posté le 07-01-2008 à 21:41:34
bah, un template c'ets purement statique, donc défini à la compilation. La ca ne te sera d'aucune utilité.
Le simple fait que tu fasse un switch sur un indicateur de type montre qu'il y a un defaut. Il fuat ici utiliser le polymorphisme
Sinon un bête :
Code :
|
solutionne le pb sans pouvoir faire de check.
De toute façon stocker un void* et transtyper derriere c'est moche.
Assure toi que contruire un MaClasse<T> renvoit un T* et basta
Edit : Ah , VTK c'est has been niveau lib.
Marsh Posté le 09-01-2008 à 16:11:37
Bonjour, merci pour la réponse. Effectivement le polymorphisme sera surement plus adapté, mais je ne m'en sort toujours pas ... Des que je charge une image, je voudrais instancier une classe fille, qui hérite d'une classe mere, et ainsi faire fonctionner le polymorphisme. Seulement comment peut-on déclarer des méthodes dans les classes filles, qui n'ont pas le même constructeur que les classes mères ? J'entend pas la des méthodes surchargées qui ne renvoient pas le même type que la méthode virtuelle de la classe mère ?
Voici des bouts de code que je souhaiterais utiliser, mais je bloque :
Code :
|
Puis dans une autre classe, j'aurai un pointeur vers AccessData
Code :
|
Et au moment du chargement des l'images, je pourrai alors faire un :
Code :
|
Et ainsi pouvoir de n'importe où appeler ma valeur au pixel x avec la méthode GetData(x);
Malheureusement cela ne fonctionne pas, je reçois une erreur au compilateur du type :
erreur: valeur void n'a pas été ignorée comme elle aurait dû l'être
Forcément il s'attend à un retour de type void. Comment faire ? Il faut mélanger des templates avec cette architecture ?
Merci si kkun sait faire ça
Marsh Posté le 09-01-2008 à 16:31:59
rencadre toi sur le Design pattern Factory et Abstract Factory
Marsh Posté le 09-01-2008 à 16:37:03
Oui c'est sur mon programme n'ets pas super bien pensé mais bon, je suis pas programmeur, ce qui m'intéresse c'est la facilité d'utilisation du code
Et comme je suis très dépendant de VTK -pas si mal au passage , pour l'imagerie médicale, je ne connais pas mieux !-
Et bien je dois faire avec leur fichu pointeur de donnée en void*
Je vais creuser encore un peu !
merci de l'aide en tout cas !
Marsh Posté le 09-01-2008 à 16:51:02
Takahani a écrit : Oui c'est sur mon programme n'ets pas super bien pensé mais bon, je suis pas programmeur, ce qui m'intéresse c'est la facilité d'utilisation du code |
Les DP n'ont aucun rapprot avec quoique se soit. C'ets juste de sméthodes éprouvées. La typiquement tu as besoin d'une factory
http://fr.wikipedia.org/wiki/Fabri [...] ception%29
Marsh Posté le 09-01-2008 à 17:04:26
Merci, je ne connaissais pas du tout ce procédé !
Effectivement pour la construction ça va me simplifier la tache, par contre derriere il me faut toujours une méthode virtuelle qui renvoie un type générique pour la classe mère (AccessData) et des méthodes virtuelles filles qui elles renvoient respectivement des valeurs de types différents. Pour la méthode GetData() je ne vois pas bien encore comment faire (suis vraiment un boulet, dsl ...)
Mais bon au moins j'apprends un peu
Marsh Posté le 09-01-2008 à 17:07:35
regarde l'exemple sur wiki, c'est un truc qui s'appelle ImageReader
Marsh Posté le 09-01-2008 à 17:28:20
Ok j'ai donc fabriqué une classe :
Code :
|
Avec les autres classes :
Code :
|
Et comme ça pour instancier la classe je n'ai besoin que des lignes :
Code :
|
Ca ça fonctionne nickel merci du tuyau c'est effectivement plus propre avec la factory
Par contre mon gcc ne veut pas compiler car la méthode GetData de la classe mere AccessData renvoit un void et que les autres méthode filles Access_Double et tout renvoi kkchose de différents. Il me donne une erreur du type :
Code :
|
Désolé d'éprouver ta patience, si tu en as marre c'est pas grave, je comprendrai
Marsh Posté le 09-01-2008 à 17:31:31
fait une méthode abstraite
Code :
|
Marsh Posté le 09-01-2008 à 18:06:44
Il n'en veux pas de la méthode abstraite, il n'est tjrs pas d'accord d'avoir un type de retour différent entre la méthode abstraite et les méthodes filles. Ce n'est pas grave, je vais revoir la conception de mon programme.
Merci de ta patience !
Marsh Posté le 09-01-2008 à 18:07:53
ça peut pas marcher ces virtual avec des types de retours différents
Marsh Posté le 09-01-2008 à 18:25:33
Variant vient avec la plateforme de dev microsoft, non ?
Le programme doit être cross-plateforme
Marsh Posté le 09-01-2008 à 18:44:29
Ok, pkoi pas alors, mais il faut inclure tout boost dans le projet alors ...
C'est pas trop relou à compiler sou wind**be ?
Je vais me renseigner. Tjrs un grand merci !
Marsh Posté le 09-01-2008 à 19:19:41
c'ets uen bibliothèque de .h ... ca se compile guère. En outre, y a deja le binaire win32 de fournie
Marsh Posté le 10-09-2008 à 01:14:18
Tiens à propos de ce problème de variant, vous auriez pas par hasard une idée de solution vaguement élégante sans utiliser boost par hasard ?
Marsh Posté le 10-09-2008 à 08:33:41
bah non vu que boost implante la version élégante :E
si c'est des prb de lourdeur d'include, regarde du coté de boost bcp pour extraire la partie strictement nécessaire.
Mais bon, commencez à vous habituez à ça, boost c'est l'antichambre de std
Marsh Posté le 10-09-2008 à 10:49:02
Joel F a écrit : bah non vu que boost implante la version élégante :E Mais bon, commencez à vous habituez à ça, boost c'est l'antichambre de std |
Ben à vrai dire j'aimerai beaucoup pouvoir bosser avec sur ce coup-là mais en l'occurrence ça risque d'être foutrement compliqué de faire accepter aux chef d'inclure boost au projet.
Marsh Posté le 10-09-2008 à 10:52:40
ReplyMarsh Posté le 10-09-2008 à 11:26:10
Joel F a écrit : v_v foutu daycidorz >_> |
Bon j'ai lancé la machine administrative pour savoir si je peux ou pas
Marsh Posté le 07-01-2008 à 21:34:50
Bonjour,
Avant toutes choses, autant préciser que je n'y connais pas grand chose en prog et que ce que j souhaite est surement tordu ou irréalisable mais bon, j'y crois
Alors voila je souhaiterais avoir une méthode template dans une classe qui me renvoie une valeur d'un certain type, ce type étant définie par un attribut interne de la classe (un entier qui prend plusieurs valeurs ...)
Un peu de code sera sûrement plus parlant (j'espère )
Tout le problème se situe sur cette dernière méthode qui ne fonctionne pas dans l'état (dommage !). Et je ne veux pas avoir à faire ce qui suit sans quoi l'intérêt de la méthode template est plus que limité !
Est ce qu'il existe un moyen de récupérer ma valeur avec une seule fonction, sans passer par le switch case ? Ca serait pas mal car je vais avoir énormément de méthodes du type [B]MaMethodeAuPif [/B]dans différentes classes qui héritent de MaClasseA, et je voudrais éviter le switch avec les 15 types à chaque fois ...
Voila merci d'avance et redites si c'est incompréhensible ou autres
Bonne soirée et merci pour votre forum riche en information
Simon
Message édité par Takahani le 07-01-2008 à 21:36:43