Informations sur la STL

simtiers Messages postés 207 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 2 novembre 2006 - 17 mai 2005 à 20:16
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 - 17 mai 2005 à 21:28
Salut !



Existe-il dans la STL une classe de stockage du genre vector qui permette de stocker des variables de type différents ?



En fait, je crée une fonction à nombre d'arguments variables (les
fameux "..." ), ces arguments pouvant être de types différents.

Il faut que je sache s'il s'agit d'un int, d'un double ou d'une chaine de caractères.



J'avais pensé à faire une structure contentant ces infos, puis les
passer par un vetor, mais je sais pas trop comment faire cette
structure (un union peut-être ?)



Merci

10 réponses

steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
17 mai 2005 à 20:36
Pour "..." tu as tout dans stdarg.h, en C++ tu as la surcharge.
0
simtiers Messages postés 207 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 2 novembre 2006
17 mai 2005 à 20:40
Pour le moment, j'ai opté pour la structure contenant un union

Je fais passer les structures dans un vector (plus facile à gérer pour le moment) :



struct Lua_Arguments

{

char TypeOfArgument;



union

{

long long_var;

double double_var;

char* char_var;

} variable;

};





Sinon, je voulais quelle fonction fallait préferer : printf ou cout ?
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
17 mai 2005 à 21:00
Mais printf c'est du C ?? En C++ tu utilises std::cout << et c'est tout.

Tu veux faire quoi exactement ? Parce que ce que tu propose passe en C a la rigueur mais en C++ il doit y avoir plus élégant.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
17 mai 2005 à 21:00
Pourquoi pas une classe Type, et des sous classes Long, Double, Chaine rassemblés dans un vector<Type*>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
17 mai 2005 à 21:01
Meme en C++, printf peut avoir des avantages: par exemple écrire un
entier en heaxadecimal avec %x. Je sais pas faire ca avec cout
0
simtiers Messages postés 207 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 2 novembre 2006
17 mai 2005 à 21:05
Comme le dit vecchio : printf est très utile pour le formatage direct de ce que l'on veut afficher.

J'utilise cout seulement pour les chaines directement affichables



vecchio : je comprends pas trop bien ton idée pour le vector<type*>, tu peux en dire un peu plus ?
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
17 mai 2005 à 21:09
Tu veux rassembler des variables de type différent? Mais c'est
impossible, tu peux donc jouer avec l'héritage: Type est une classe de
base (peut-être abstraite) et chaque type possible pour le vector est
une classe qui hérite de Type



class Type{};

class Int: public Type{int n;...};

class Chaine: public Type{char* s;...};

etc...

vector<Type*> v;

v.push_back(new Int(2));

v.push_back(new Chaine("bonjour"));
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
17 mai 2005 à 21:15
cout << hex << num;

voir precision, voir la documentation.

printf c'est du C au cas ou vous ne l'auriez pas remarquez, le seul point commun entre le C et le C++ c'est la synthaxe.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
17 mai 2005 à 21:20
La syntaxe est évidemment différente entre les deux langages, de plus
on peut très bien utiliser printf en C++ de la même facon qu'on a le
droit d'utiliser un char* à la place d'une string. D'ailleurs quelle
est l'utilité de <cstdio.h>?
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
17 mai 2005 à 21:28
Le C++ supporte comme le C la notion de pointeur donc char * à un sens,
et on a toujurs les string-zero et d'autres trucs qui sont des traces
de la compatibilité du C avec le C++ mais maintenant ce n'est plus
vrai, les 2 langages évoluent chacun de leur cotés et sont incompatible.



L'interet de cstdio est d'utilisée quand c'est nécéssaire des fonctions
de la libc en C++, mais si l'équivalent existe en C++ bjarne Stroustrup
ne fais pas que recommandé d'utilisée la version C++, il dit tout
simplement que c'est idiot d'utiliser un compilateur C++ qui dans
l'industrie coute plus cher (et qui est censée rendre le développement
et la maintenance de programme beaucoup moins couteux) pour compiler du
C.
0
Rejoignez-nous