Je te comprends. Bien qu'ayant quelques années d'expérience en C++, je ne comprends toujours pas grand-chose aux pointeurs de fonctions. Ça fait partie des "coins poussiéreux" du langage, dont je ne me sers quasiment jamais.
C'est très différent des pointeurs de fonction du C ?
Si j'ai bien compris leurs réponses, Matthieu et kanze avaient l'air de penser que non.
Mais je pense que, dans de nombreux cas où l'utilisation de pointeurs de fonctions peut s'avérer utile en C, on pourrait s'en sortir avec des sous-classes et des fonctions virtuelles en C++.
C'est d'ailleurs la seule possibilité en Java.
C'est en ce sens que je comprends la remarque de Fabien : ça existe, il y a probablement des cas où ce sera utile même en C++, mais il n'a quasiment jamais rencontré de tels cas.
Ok, comme je connais beaucoup mieux C et Java que C++, je me posais des questions ;-)
Olivier Miakinen wrote:
Je te comprends. Bien qu'ayant quelques années d'expérience en C++, je
ne comprends toujours pas grand-chose aux pointeurs de fonctions. Ça
fait partie des "coins poussiéreux" du langage, dont je ne me sers
quasiment jamais.
C'est très différent des pointeurs de fonction du C ?
Si j'ai bien compris leurs réponses, Matthieu et kanze avaient l'air de
penser que non.
Mais je pense que, dans de nombreux cas où l'utilisation de pointeurs
de fonctions peut s'avérer utile en C, on pourrait s'en sortir avec des
sous-classes et des fonctions virtuelles en C++.
C'est d'ailleurs la seule possibilité en Java.
C'est en ce sens que je
comprends la remarque de Fabien : ça existe, il y a probablement des cas
où ce sera utile même en C++, mais il n'a quasiment jamais rencontré de
tels cas.
Ok, comme je connais beaucoup mieux C et Java que C++, je me posais des
questions ;-)
Je te comprends. Bien qu'ayant quelques années d'expérience en C++, je ne comprends toujours pas grand-chose aux pointeurs de fonctions. Ça fait partie des "coins poussiéreux" du langage, dont je ne me sers quasiment jamais.
C'est très différent des pointeurs de fonction du C ?
Si j'ai bien compris leurs réponses, Matthieu et kanze avaient l'air de penser que non.
Mais je pense que, dans de nombreux cas où l'utilisation de pointeurs de fonctions peut s'avérer utile en C, on pourrait s'en sortir avec des sous-classes et des fonctions virtuelles en C++.
C'est d'ailleurs la seule possibilité en Java.
C'est en ce sens que je comprends la remarque de Fabien : ça existe, il y a probablement des cas où ce sera utile même en C++, mais il n'a quasiment jamais rencontré de tels cas.
Ok, comme je connais beaucoup mieux C et Java que C++, je me posais des questions ;-)
Jean-Marc Bourguet
Jean-Claude Arbaut writes:
Fabien LE LEZ wrote:
On Wed, 14 Jun 2006 15:33:28 +0200, Bruno CAUSSE :
Mais c'est loin d'etre evident pour le simple boetien que je suis. Je te comprends. Bien qu'ayant quelques années d'expérience en C++, je
ne comprends toujours pas grand-chose aux pointeurs de fonctions. Ça fait partie des "coins poussiéreux" du langage, dont je ne me sers quasiment jamais.
C'est très différent des pointeurs de fonction du C ?
Si on exclus les differences syntaxiques en considerant que this est un parametre, la grosse difference est qu'on peut pointer vers un membre virtuel, auquel cas l'appel tiendra compte du type dynamique de l'objet.
L'utilisation la plus courante me semble etre dans les contextes de callbacks (mais pourquoi ne pas utiliser une bibliotheque existante qui masque ca, genre libsig++, boost::signals, boost::function ?).
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Jean-Claude Arbaut <jcarbaut@laposte.net> writes:
Fabien LE LEZ wrote:
On Wed, 14 Jun 2006 15:33:28 +0200, Bruno CAUSSE <envoi@lesSpam.fr>:
Mais c'est loin d'etre evident pour le simple boetien que je suis.
Je te comprends. Bien qu'ayant quelques années d'expérience en C++, je
ne comprends toujours pas grand-chose aux pointeurs de fonctions. Ça
fait partie des "coins poussiéreux" du langage, dont je ne me sers
quasiment jamais.
C'est très différent des pointeurs de fonction du C ?
Si on exclus les differences syntaxiques en considerant que this est
un parametre, la grosse difference est qu'on peut pointer vers un
membre virtuel, auquel cas l'appel tiendra compte du type dynamique de
l'objet.
L'utilisation la plus courante me semble etre dans les contextes de
callbacks (mais pourquoi ne pas utiliser une bibliotheque existante
qui masque ca, genre libsig++, boost::signals, boost::function ?).
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
On Wed, 14 Jun 2006 15:33:28 +0200, Bruno CAUSSE :
Mais c'est loin d'etre evident pour le simple boetien que je suis. Je te comprends. Bien qu'ayant quelques années d'expérience en C++, je
ne comprends toujours pas grand-chose aux pointeurs de fonctions. Ça fait partie des "coins poussiéreux" du langage, dont je ne me sers quasiment jamais.
C'est très différent des pointeurs de fonction du C ?
Si on exclus les differences syntaxiques en considerant que this est un parametre, la grosse difference est qu'on peut pointer vers un membre virtuel, auquel cas l'appel tiendra compte du type dynamique de l'objet.
L'utilisation la plus courante me semble etre dans les contextes de callbacks (mais pourquoi ne pas utiliser une bibliotheque existante qui masque ca, genre libsig++, boost::signals, boost::function ?).
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Fabien LE LEZ
On Thu, 15 Jun 2006 16:53:20 +0200, Olivier Miakinen :
C'est en ce sens que je comprends la remarque de Fabien : ça existe, il y a probablement des cas où ce sera utile même en C++, mais il n'a quasiment jamais rencontré de tels cas.
Je confirme. En fait, j'ai déjà rencontré de tels cas : lors de l'utilisation d'une bibliothèque écrite en C. En particulier, l'API Windows.
On Thu, 15 Jun 2006 16:53:20 +0200, Olivier Miakinen :
C'est en ce sens que je
comprends la remarque de Fabien : ça existe, il y a probablement des cas
où ce sera utile même en C++, mais il n'a quasiment jamais rencontré de
tels cas.
Je confirme. En fait, j'ai déjà rencontré de tels cas : lors de
l'utilisation d'une bibliothèque écrite en C. En particulier, l'API
Windows.
On Thu, 15 Jun 2006 16:53:20 +0200, Olivier Miakinen :
C'est en ce sens que je comprends la remarque de Fabien : ça existe, il y a probablement des cas où ce sera utile même en C++, mais il n'a quasiment jamais rencontré de tels cas.
Je confirme. En fait, j'ai déjà rencontré de tels cas : lors de l'utilisation d'une bibliothèque écrite en C. En particulier, l'API Windows.
Jean-Claude Arbaut
Jean-Marc Bourguet wrote:
Jean-Claude Arbaut writes:
Fabien LE LEZ wrote:
On Wed, 14 Jun 2006 15:33:28 +0200, Bruno CAUSSE :
Mais c'est loin d'etre evident pour le simple boetien que je suis.
Je te comprends. Bien qu'ayant quelques années d'expérience en C++, je ne comprends toujours pas grand-chose aux pointeurs de fonctions. Ça fait partie des "coins poussiéreux" du langage, dont je ne me sers quasiment jamais.
C'est très différent des pointeurs de fonction du C ?
Si on exclus les differences syntaxiques en considerant que this est un parametre, la grosse difference est qu'on peut pointer vers un membre virtuel, auquel cas l'appel tiendra compte du type dynamique de l'objet.
Ah, oui, ça c'est une différence assez importante !
L'utilisation la plus courante me semble etre dans les contextes de callbacks (mais pourquoi ne pas utiliser une bibliotheque existante qui masque ca, genre libsig++, boost::signals, boost::function ?).
A+
Jean-Marc Bourguet wrote:
Jean-Claude Arbaut <jcarbaut@laposte.net> writes:
Fabien LE LEZ wrote:
On Wed, 14 Jun 2006 15:33:28 +0200, Bruno CAUSSE <envoi@lesSpam.fr>:
Mais c'est loin d'etre evident pour le simple boetien que je suis.
Je te comprends. Bien qu'ayant quelques années d'expérience en C++, je
ne comprends toujours pas grand-chose aux pointeurs de fonctions. Ça
fait partie des "coins poussiéreux" du langage, dont je ne me sers
quasiment jamais.
C'est très différent des pointeurs de fonction du C ?
Si on exclus les differences syntaxiques en considerant que this est
un parametre, la grosse difference est qu'on peut pointer vers un
membre virtuel, auquel cas l'appel tiendra compte du type dynamique de
l'objet.
Ah, oui, ça c'est une différence assez importante !
L'utilisation la plus courante me semble etre dans les contextes de
callbacks (mais pourquoi ne pas utiliser une bibliotheque existante
qui masque ca, genre libsig++, boost::signals, boost::function ?).
On Wed, 14 Jun 2006 15:33:28 +0200, Bruno CAUSSE :
Mais c'est loin d'etre evident pour le simple boetien que je suis.
Je te comprends. Bien qu'ayant quelques années d'expérience en C++, je ne comprends toujours pas grand-chose aux pointeurs de fonctions. Ça fait partie des "coins poussiéreux" du langage, dont je ne me sers quasiment jamais.
C'est très différent des pointeurs de fonction du C ?
Si on exclus les differences syntaxiques en considerant que this est un parametre, la grosse difference est qu'on peut pointer vers un membre virtuel, auquel cas l'appel tiendra compte du type dynamique de l'objet.
Ah, oui, ça c'est une différence assez importante !
L'utilisation la plus courante me semble etre dans les contextes de callbacks (mais pourquoi ne pas utiliser une bibliotheque existante qui masque ca, genre libsig++, boost::signals, boost::function ?).
A+
kanze
Jean-Marc Bourguet wrote:
Jean-Claude Arbaut writes:
Fabien LE LEZ wrote:
On Wed, 14 Jun 2006 15:33:28 +0200, Bruno CAUSSE :
Mais c'est loin d'etre evident pour le simple boetien que je suis. Je te comprends. Bien qu'ayant quelques années
d'expérience en C++, je ne comprends toujours pas grand-chose aux pointeurs de fonctions. Ça fait partie des "coins poussiéreux" du langage, dont je ne me sers quasiment jamais.
C'est très différent des pointeurs de fonction du C ?
Si on exclus les differences syntaxiques en considerant que this est un parametre, la grosse difference est qu'on peut pointer vers un membre virtuel, auquel cas l'appel tiendra compte du type dynamique de l'objet.
L'utilisation la plus courante me semble etre dans les contextes de callbacks (mais pourquoi ne pas utiliser une bibliotheque existante qui masque ca, genre libsig++, boost::signals, boost::function ?).
Je m'en suis servi plusieurs fois, soit pour des callbacks, soit, plus souvent, pour des appels à travers des tableaux (indicés par un caractère, par exemple). Mais si je régarde bien, il s'avère que dans prèsque tous les cas, j'ai fini par les remplacer par des objets fonctionnels (souvent avec une classe de base abstraite) -- au fur et à mesure que le programme se dévoloppait, je finissais par avoir des cas où je voulais avoir la même fonction, mais avec un paramètre différent, ou quelque chose de ce genre.
À titre d'exemple : http://kanze.james.neuf.fr/code/Util/Text/CharacterClass/cclsParse.cc, le parseur de ma classe CharacterClass. (C'est un SetOfCharacter avec un constructeur qui accepte des chaînes du genre "[a-z]" ou "n". La documentation s'en trouve à http://kanze.james.neuf.fr/doc/en/Text/html/index.html.) Dans les versions originales, il y a tant d'années, il y avait un tableau des
struct Init { int character ; char (Parser::* handler)( streambuf* source ) const ; } ;
Une recherche sur le caractère après le '' comme key me donner l'adresse d'une fonction member à appeler. Aujourd'hui, les éléments du tableau sont :
struct Init { int character ; EscapeParser const* handler ; } ;
où EscapeParser est une classe abstraite. C'est plus à écrire au départ, parce qu'il faut définir EscapeParser, puis définir une classe qui en dérive pour chaque cas particulier. Mais le traitement des 'a', 'b', etc. ne diffère que du paramètre du constructeur, de même que les traitements des 'x', 'u' et 'U' (et même les ' ').
-- 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
Jean-Marc Bourguet wrote:
Jean-Claude Arbaut <jcarbaut@laposte.net> writes:
Fabien LE LEZ wrote:
On Wed, 14 Jun 2006 15:33:28 +0200, Bruno CAUSSE <envoi@lesSpam.fr>:
Mais c'est loin d'etre evident pour le simple boetien que
je suis.
Je te comprends. Bien qu'ayant quelques années
d'expérience en C++, je ne comprends toujours pas
grand-chose aux pointeurs de fonctions. Ça fait partie des
"coins poussiéreux" du langage, dont je ne me sers
quasiment jamais.
C'est très différent des pointeurs de fonction du C ?
Si on exclus les differences syntaxiques en considerant que
this est un parametre, la grosse difference est qu'on peut
pointer vers un membre virtuel, auquel cas l'appel tiendra
compte du type dynamique de l'objet.
L'utilisation la plus courante me semble etre dans les
contextes de callbacks (mais pourquoi ne pas utiliser une
bibliotheque existante qui masque ca, genre libsig++,
boost::signals, boost::function ?).
Je m'en suis servi plusieurs fois, soit pour des callbacks,
soit, plus souvent, pour des appels à travers des tableaux
(indicés par un caractère, par exemple). Mais si je régarde
bien, il s'avère que dans prèsque tous les cas, j'ai fini par
les remplacer par des objets fonctionnels (souvent avec une
classe de base abstraite) -- au fur et à mesure que le programme
se dévoloppait, je finissais par avoir des cas où je voulais
avoir la même fonction, mais avec un paramètre différent, ou
quelque chose de ce genre.
À titre d'exemple :
http://kanze.james.neuf.fr/code/Util/Text/CharacterClass/cclsParse.cc,
le parseur de ma classe CharacterClass. (C'est un SetOfCharacter
avec un constructeur qui accepte des chaînes du genre "[a-z]" ou
"\n". La documentation s'en trouve à
http://kanze.james.neuf.fr/doc/en/Text/html/index.html.) Dans
les versions originales, il y a tant d'années, il y avait un
tableau des
struct Init
{
int character ;
char (Parser::* handler)( streambuf* source ) const ;
} ;
Une recherche sur le caractère après le '\' comme key me donner
l'adresse d'une fonction member à appeler. Aujourd'hui, les
éléments du tableau sont :
struct Init
{
int character ;
EscapeParser const* handler ;
} ;
où EscapeParser est une classe abstraite. C'est plus à écrire au
départ, parce qu'il faut définir EscapeParser, puis définir une
classe qui en dérive pour chaque cas particulier. Mais le
traitement des 'a', 'b', etc. ne diffère que du paramètre du
constructeur, de même que les traitements des 'x', 'u' et
'U' (et même les ' ').
--
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
On Wed, 14 Jun 2006 15:33:28 +0200, Bruno CAUSSE :
Mais c'est loin d'etre evident pour le simple boetien que je suis. Je te comprends. Bien qu'ayant quelques années
d'expérience en C++, je ne comprends toujours pas grand-chose aux pointeurs de fonctions. Ça fait partie des "coins poussiéreux" du langage, dont je ne me sers quasiment jamais.
C'est très différent des pointeurs de fonction du C ?
Si on exclus les differences syntaxiques en considerant que this est un parametre, la grosse difference est qu'on peut pointer vers un membre virtuel, auquel cas l'appel tiendra compte du type dynamique de l'objet.
L'utilisation la plus courante me semble etre dans les contextes de callbacks (mais pourquoi ne pas utiliser une bibliotheque existante qui masque ca, genre libsig++, boost::signals, boost::function ?).
Je m'en suis servi plusieurs fois, soit pour des callbacks, soit, plus souvent, pour des appels à travers des tableaux (indicés par un caractère, par exemple). Mais si je régarde bien, il s'avère que dans prèsque tous les cas, j'ai fini par les remplacer par des objets fonctionnels (souvent avec une classe de base abstraite) -- au fur et à mesure que le programme se dévoloppait, je finissais par avoir des cas où je voulais avoir la même fonction, mais avec un paramètre différent, ou quelque chose de ce genre.
À titre d'exemple : http://kanze.james.neuf.fr/code/Util/Text/CharacterClass/cclsParse.cc, le parseur de ma classe CharacterClass. (C'est un SetOfCharacter avec un constructeur qui accepte des chaînes du genre "[a-z]" ou "n". La documentation s'en trouve à http://kanze.james.neuf.fr/doc/en/Text/html/index.html.) Dans les versions originales, il y a tant d'années, il y avait un tableau des
struct Init { int character ; char (Parser::* handler)( streambuf* source ) const ; } ;
Une recherche sur le caractère après le '' comme key me donner l'adresse d'une fonction member à appeler. Aujourd'hui, les éléments du tableau sont :
struct Init { int character ; EscapeParser const* handler ; } ;
où EscapeParser est une classe abstraite. C'est plus à écrire au départ, parce qu'il faut définir EscapeParser, puis définir une classe qui en dérive pour chaque cas particulier. Mais le traitement des 'a', 'b', etc. ne diffère que du paramètre du constructeur, de même que les traitements des 'x', 'u' et 'U' (et même les ' ').
-- 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