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 

connaitre le nom de la fonction appellée

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





PostPosted: Fri Jul 29, 2005 10:34 am    Post subject: connaitre le nom de la fonction appellée Reply with quote



Bonjour,

On veut inclure dans l'application, un module de log afin de logguer
toutes les actions utilisateur.

Pour cela, j'aimerais logger un certains nombre de fonctions.

Existe-t-il une fonction permettant de connaitre le nom de la fonction
lancée.

Par exemple:

void maFonction ( )
{
CString nomFonction;
.....
nomFonction=quelleEstLaFonctionAppellé(); // de telle sorte que
nomFonction contienne : maFonction.
....

}

Merci pour vos éclaircissement.

Back to top
Fabien LE LEZ
Guest





PostPosted: Fri Jul 29, 2005 10:57 am    Post subject: Re: connaitre le nom de la fonction appellée Reply with quote



On 29 Jul 2005 03:34:26 -0700, "GaHweL" <gahwel (AT) gmail (DOT) com>:

Quote:
Existe-t-il une fonction permettant de connaitre le nom de la fonction
lancée.

En C++ standard, si je ne m'abuse, non.
Mais le thread qui commence par
<news:42d35b46$0$26418$626a14ce (AT) news (DOT) free.fr> peut peut-être t'aider.


Back to top
AG
Guest





PostPosted: Fri Jul 29, 2005 12:30 pm    Post subject: Re: connaitre le nom de la fonction appellée [HS] Reply with quote



Et en C99, tu as __func__ qui permet :

printf("fonction : %sn",__func__);

AG.
Back to top
GaHweL
Guest





PostPosted: Mon Aug 01, 2005 1:11 pm    Post subject: Re: connaitre le nom de la fonction appellée [HS] Reply with quote

Bon ben , là j'ai un autre soucis. C'est à dire, qu'après avoir
voulu retrouver le nom de la fonction, j'aimerai retrouver le type
d'une structure.

par exemple:

j'ai deux type de structures, struct1 & struct2.

suivant si c'est l'une ou l'autre, j'aimerai y appliqué une opération
différente.

en fait une fonction du type sizeof, qui s'appellerai typeof, et qui
renverrais le type de la donnée passée en paramètre.

Une telle fonction exixte-t-elle ?.

Merci pour votre aide passée et future.

Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Mon Aug 01, 2005 1:46 pm    Post subject: Re: connaitre le nom de la fonction appellée [HS] Reply with quote

GaHweL wrote:

Quote:
Bon ben , là j'ai un autre soucis. C'est à dire, qu'après
avoir voulu retrouver le nom de la fonction, j'aimerai
retrouver le type d'une structure.

par exemple:

j'ai deux type de structures, struct1 & struct2.

suivant si c'est l'une ou l'autre, j'aimerai y appliqué une
opération différente.

en fait une fonction du type sizeof, qui s'appellerai typeof,
et qui renverrais le type de la donnée passée en paramètre.

Une telle fonction exixte-t-elle ?.

Elle existe. Elle s'appelle typeid, et elle renvoie un
std::type_info. (En fait, comme sizeof, c'est un opérateur, et
non une fonction.) Et la classe type_info a bien une fonction
name, ce qui veut dire que tu peut écrire des choses comme:

std::cout << typeid( *p ).name() << std::endl ;

Si le type pointé par p est polymorphique, tu aurais même le nom
du type de l'objet réel, et non le type déclaré.

La norme ne dit rien sur comment la chaine renvoyée est
formattée. Certains compilateurs te donnent quelque chose
d'utiles, d'autres non.

--
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
Fabien LE LEZ
Guest





PostPosted: Mon Aug 01, 2005 1:50 pm    Post subject: Re: connaitre le nom de la fonction appellée [HS] Reply with quote

On 1 Aug 2005 06:11:38 -0700, "GaHweL" <gahwel (AT) gmail (DOT) com>:

Quote:
j'ai deux type de structures, struct1 & struct2.

Note en passant : il n'y a pas de structures en C++, il n'y a que des
classes.
Les mots-clefs "struct" et "class" sont quasiment équivalents ; la
différence est que "struct" indique que tout est public par défaut.

Les deux codes suivants font la même chose :

struct Machin: public Truc
{
private: int n;
};


class Machin: public Truc
{
private: int n;
};


Quote:
suivant si c'est l'une ou l'autre, j'aimerai y appliqué une opération
différente.

Généralement, la fonction en question est membre (éventuellement
virtuel) de la classe struct1 (ou struct2).

Une autre possibilité :

void f (struct1 const& machin)
{
...
}

void f (struct2 const& machin)
{
...
}


Un cas courant :

class struct_base { ... };
class struct1: public struct_base { ... };
class struct2: public struct_base { ... };

void f (struct_base const& machin);

int main()
{
struct1 s1;
struct2 s2;
f (s1);
f (s2);
}

void f (struct_base const& machin)
{
/*
Ici, on cherche à savoir si machin est un "struct1".
Comme je l'ai dit, l'idéal est d'avoir une fonction virtuelle de
struct_base, qui indique que faire -- ou, mieux, qui fait l'action
voulue.

Il y a toutefois une possibilité : dynamic_cast<>
*/
if (dynamic_cast<struct1 const*>(machin) != 0)
{
cerr << "machin est un struct1" << endl;
}
else
{
cerr << "machin n'est pas un struct1" << endl;
}
}

Note qu'il existe un typeof en C++ (enfin, je crois), mais j'avoue ne
l'avoir jamais utilisé, ni même être sûr de savoir à quoi il sert.

Note aussi que si struct1d dérive de struct1, alors un objet de type
struct1d _est_ un objet de type struct1.


Back to top
Falk Tannhäuser
Guest





PostPosted: Mon Aug 01, 2005 2:58 pm    Post subject: Re: connaitre le nom de la fonction appellée [HS] Reply with quote

GaHweL wrote:
Quote:
j'ai deux type de structures, struct1 & struct2.

suivant si c'est l'une ou l'autre, j'aimerai y appliqué une opération
différente.

Il semblerait que tu cherches les fonctions membres virtuelles ?

struct StructBase
{
virtual void Operation( /* paramètres ??? */ ) = 0;
};

struct Struct1 : public StructBase
{
// Données ...
virtual void Operation( /* paramètres ??? */ );
};

void Struct1::Operation( /* paramètres ??? */ )
{
// fais quelque chose
}

struct Struct2 : public StructBase
{
// Autres données ...
virtual void Operation( /* paramètres ??? */ );
};

void Struct2::Operation( /* paramètres ??? */ )
{
// fais autre chose
}

void foo(StructBase& s)
{
s.Operation( /* ... */ ); // Appliquer l'opération qui va bien selon le type dynamique de 's'
}

int main()
{
Struct1 s1;
Struct2 s2;
foo(s1); // Appellera Struct1::Operation()
foo(s2); // Appellera Struct2::Operation()
return 0;
}

Falk

Back to top
GaHweL
Guest





PostPosted: Wed Aug 03, 2005 10:06 am    Post subject: Re: connaitre le nom de la fonction appellée [HS] Reply with quote

Je vais tester ça, si ça marche pas, je vous tiens au courant.
Merci beaucoup pour ces éclaircissement, vous me retirez une belle
poutre du pied.

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.