 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
olivier Guest
|
Posted: Mon Apr 25, 2005 2:45 pm Post subject: va_list dynamique |
|
|
Bonjour,
J'aurais besoin de faire le code suivant:
============ DEBUT ==============
DOMNode *nodeCurrent = getRootNode();
DOMNode * Parser::getElement1(string element, ...)
{
// comment passer ici les arguments variables recus
//en entree de la methode!!!
return this->getElement2(element, nodeCurrent, ??????);
}
DOMNode * Parser::getElement2(string element, DOMNode* node, ...)
{
cout << "ok" << endl;
}
============ FIN ==============
va_list permettrait de recuperer tous les elements passes a getElement1,
mais quelle syntaxe utiliser alors pour passer un nombre d'argument
dynamique a getElement2?
Merci d'avance.
Cordialement,
Olivier.
|
|
| Back to top |
|
 |
olivier Guest
|
Posted: Mon Apr 25, 2005 2:57 pm Post subject: Re: va_list dynamique |
|
|
Je pourrais m'en sortir avec un vector mais j'aimerais
bien savoir si c'est tout de même faisable avec des arguments variables
(je me rends compte que je devrais peut-être plutôt poster dans le forum C)
Merci.
Cordialement,
Olivier
olivier wrote:
| Quote: | Bonjour,
J'aurais besoin de faire le code suivant:
============ DEBUT ==============
DOMNode *nodeCurrent = getRootNode();
DOMNode * Parser::getElement1(string element, ...)
{
// comment passer ici les arguments variables recus
//en entree de la methode!!!
return this->getElement2(element, nodeCurrent, ??????);
}
DOMNode * Parser::getElement2(string element, DOMNode* node, ...)
{
cout << "ok" << endl;
}
============ FIN ==============
va_list permettrait de recuperer tous les elements passes a getElement1,
mais quelle syntaxe utiliser alors pour passer un nombre d'argument
dynamique a getElement2?
Merci d'avance.
Cordialement,
Olivier.
|
|
|
| Back to top |
|
 |
kanze@gabi-soft.fr Guest
|
Posted: Mon Apr 25, 2005 3:21 pm Post subject: Re: va_list dynamique |
|
|
olivier wrote:
| Quote: | Bonjour,
J'aurais besoin de faire le code suivant:
============ DEBUT ==============
DOMNode *nodeCurrent = getRootNode();
DOMNode * Parser::getElement1(string element, ...)
{
// comment passer ici les arguments variables recus
//en entree de la methode!!!
return this->getElement2(element, nodeCurrent, ??????);
}
DOMNode * Parser::getElement2(string element, DOMNode* node, ...)
{
cout << "ok" << endl;
}
============ FIN ==============
va_list permettrait de recuperer tous les elements passes a
getElement1,
mais quelle syntaxe utiliser alors pour passer un nombre d'argument
dynamique a getElement2?
Merci d'avance.
Cordialement,
Olivier.
|
|
|
| Back to top |
|
 |
kanze@gabi-soft.fr Guest
|
Posted: Mon Apr 25, 2005 3:31 pm Post subject: Re: va_list dynamique |
|
|
olivier wrote:
| Quote: | J'aurais besoin de faire le code suivant:
============ DEBUT ==============
DOMNode *nodeCurrent = getRootNode();
DOMNode * Parser::getElement1(string element, ...)
{
// comment passer ici les arguments variables recus
//en entree de la methode!!!
return this->getElement2(element, nodeCurrent, ??????);
}
DOMNode * Parser::getElement2(string element, DOMNode* node, ...)
{
cout << "ok" << endl;
}
============ FIN ==============
va_list permettrait de recuperer tous les elements passes a
getElement1, mais quelle syntaxe utiliser alors pour passer un
nombre d'argument dynamique a getElement2?
|
Je ne suis pas sûr quels paramètres exactement tu veux passer à
getElement2. Si c'est getElement2 qui doit évaluer tous les
paramètres dynamique, alors, tu peux lui passer le va_list, par
exemple :
DOMNode*
Parser::getElement1(
std::string element,
... )
{
// ...
va_list ap ;
va_start( ap, element ) ;
getElement2( element, nodeCurrent, ap ) ;
va_end( ap ) ;
}
DOMNode*
Parser::getElement2(
std::string element,
DOMNode* node,
va_list ap )
{
// ...
}
Si ce n'est qu'une partie de la liste qui t'intéresse, tu dois
pouvoir passer un pointeur ou une référence au va_list à
getElement2.
Fait gaffe, néaumoins. Le paramètre qui précède les ... ne peut
pas être une référence. Ni un certain nombre d'autres choses
(char, float, etc.). Et évidemment, les types qu'on peut
utiliser dans la liste ... sont très limités.
--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
|
|
| Back to top |
|
 |
olivier Guest
|
Posted: Tue Apr 26, 2005 1:13 pm Post subject: Re: va_list dynamique |
|
|
Merci pour ta réponse.
Même en passant:
getElement2( element, nodeCurrent, ap )
Je suis plus ou moins bloqué car je passe alors des
types string ou DOMNode dans ap, puis dans getElement2
je ne sais pas comment me positionner après
(l'appel de va_arg(ap, DOMNode*) génère un core dump car
il ne semble pas pouvoir gérer les classes).
Enfin bref, je me suis donc rabattu sur un vector<string> ap.
L'utilisation est plus lourde mais au moins ca marche!
Merci.
Olivier.
[email]kanze (AT) gabi-soft (DOT) fr[/email] wrote:
| Quote: | olivier wrote:
J'aurais besoin de faire le code suivant:
============ DEBUT ==============
DOMNode *nodeCurrent = getRootNode();
DOMNode * Parser::getElement1(string element, ...)
{
// comment passer ici les arguments variables recus
//en entree de la methode!!!
return this->getElement2(element, nodeCurrent, ??????);
}
DOMNode * Parser::getElement2(string element, DOMNode* node, ...)
{
cout << "ok" << endl;
}
============ FIN ==============
va_list permettrait de recuperer tous les elements passes a
getElement1, mais quelle syntaxe utiliser alors pour passer un
nombre d'argument dynamique a getElement2?
Je ne suis pas sûr quels paramètres exactement tu veux passer à
getElement2. Si c'est getElement2 qui doit évaluer tous les
paramètres dynamique, alors, tu peux lui passer le va_list, par
exemple :
DOMNode*
Parser::getElement1(
std::string element,
... )
{
// ...
va_list ap ;
va_start( ap, element ) ;
getElement2( element, nodeCurrent, ap ) ;
va_end( ap ) ;
}
DOMNode*
Parser::getElement2(
std::string element,
DOMNode* node,
va_list ap )
{
// ...
}
Si ce n'est qu'une partie de la liste qui t'intéresse, tu dois
pouvoir passer un pointeur ou une référence au va_list à
getElement2.
Fait gaffe, néaumoins. Le paramètre qui précède les ... ne peut
pas être une référence. Ni un certain nombre d'autres choses
(char, float, etc.). Et évidemment, les types qu'on peut
utiliser dans la liste ... sont très limités.
--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
|
|
|
| Back to top |
|
 |
Horst Kraemer Guest
|
Posted: Sat Apr 30, 2005 4:12 am Post subject: Re: va_list dynamique |
|
|
olivier <nospam (AT) nospam (DOT) com> wrote:
| Quote: | Merci pour ta réponse.
Même en passant:
getElement2( element, nodeCurrent, ap )
Je suis plus ou moins bloqué car je passe alors des
types string ou DOMNode dans ap, puis dans getElement2
je ne sais pas comment me positionner après
(l'appel de va_arg(ap, DOMNode*) génère un core dump car
il ne semble pas pouvoir gérer les classes).
|
Ce n'est pas la faute du DOMNode* parce que des pointeurs sont
toujours permis. C'est la faute des objets du type "string" parce que
la classe "string" est une classe "non-POD".
--
Horst
--
Lâche pas la patate!
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|