Informations sur la STL

Signaler
Messages postés
207
Date d'inscription
jeudi 3 avril 2003
Statut
Membre
Dernière intervention
2 novembre 2006
-
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
-
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

Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
3
Pour "..." tu as tout dans stdarg.h, en C++ tu as la surcharge.
Messages postés
207
Date d'inscription
jeudi 3 avril 2003
Statut
Membre
Dernière intervention
2 novembre 2006

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 ?
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
3
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.
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Pourquoi pas une classe Type, et des sous classes Long, Double, Chaine rassemblés dans un vector<Type*>
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Meme en C++, printf peut avoir des avantages: par exemple écrire un
entier en heaxadecimal avec %x. Je sais pas faire ca avec cout
Messages postés
207
Date d'inscription
jeudi 3 avril 2003
Statut
Membre
Dernière intervention
2 novembre 2006

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 ?
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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"));
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
3
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.
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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>?
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
3
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.