[C++] - C++ - Programmation
Marsh Posté le 30-01-2005 à 21:43:18
if (card.m_tagIndex["nom"].GetData() == "vincent" )
;
ou encore
// age pointe vers une donnee numerique (par ex int)
if (card.m_tagIndex["age"].GetData() == 10)
là tu fous tout le typage en l'air. Fais du polymorphisme (à coup de dynamic_cast), voir même utilise le Design Pattern Visitor.
Marsh Posté le 31-01-2005 à 11:23:15
Taz a écrit : if (card.m_tagIndex["nom"].GetData() == "vincent" ) |
t'aurais un exemple ou un lien ?
Marsh Posté le 31-01-2005 à 11:33:08
voir le topic C++
ce qu'il faut, c'est que chaque test te permettent de déterminer le type (ou type parent) de ta 'card' pour pouvoir en fait quelque chose.
voir aussi boost::any
Marsh Posté le 30-01-2005 à 21:37:25
Bonjour,
j'ai un probleme de conception objet.
J'ai modelisé une sorte de systeme de fichiers (je dis une sorte car ca represente le systeme de fichier d'une carte à puce).
Ca se presente de la façon suivante : une classe CardData qui contient 1 ou plusieurs fichiers indexés par un numero. Chaque fichier contient 1 a n enregistrements et chaque enregistrement contient un buffer d'octets.
A chaque octet ou groupe d'octets j'attribue un "tag", par exemple dans le fichier 0x17, l'enregistrement numero 1 avec un offset de 3 et une taille de 10 je stocke une string.
Voici la classe
Le probleme est le suivant : j'aimerais acceder a une donnee en specifiant juste sont tag.
PAr exemple j'aimerais faire un truc du style
CCardData card;
// nom pointe vers une donnee de type chaine
if (card.m_tagIndex["nom"].GetData() == "vincent" )
;
ou encore
// age pointe vers une donnee numerique (par ex int)
if (card.m_tagIndex["age"].GetData() == 10)
;
mais malheureusement ce n'est pas possible de faire ca je pense
car une fonction ne peut pas avoir la meme signature avec seulement
le type de retour qui change.
Donc pour resumer j'ai besoin de quelque chose a qui je passe une chaine
et qui me renvoit la donnee(soit une chaine soit un nombre).
Dans CardIndex j'associe a une chaine le numero de fichiers, le numero de record, la taille, l'offset et le type.
Si vous avez reussi a comprendre un tiers de ce que je viens d'ecrire auriez vous une idéee sur comment faire.