C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

va_list dynamique

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
olivier
Guest





PostPosted: Mon Apr 25, 2005 2:45 pm    Post subject: va_list dynamique Reply with 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
olivier
Guest





PostPosted: Mon Apr 25, 2005 2:57 pm    Post subject: Re: va_list dynamique Reply with quote



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





PostPosted: Mon Apr 25, 2005 3:21 pm    Post subject: Re: va_list dynamique Reply with quote




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





PostPosted: Mon Apr 25, 2005 3:31 pm    Post subject: Re: va_list dynamique Reply with quote

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





PostPosted: Tue Apr 26, 2005 1:13 pm    Post subject: Re: va_list dynamique Reply with 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).

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





PostPosted: Sat Apr 30, 2005 4:12 am    Post subject: Re: va_list dynamique Reply with quote

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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.