Quelles sont les motivations qui peuvent me pousser à utiliser des
méthodes inline ?
Par exemple, j'ai une classe avec des membres privés dont je déclare des
accesseurs (getFoo, setFoo)
public:
int getFoo() const;
void setFoo(int value);
private:
int m_foot;
Est-il judicieux de déclarer getFoo et setFoo en inline d'emblée, en
sachant que ce sont des fonctions au contenu trivial et petit (getFoo se
contente de renvoyer m_foot par exemple) ?
Ceci est un metaprogramme qui genere une serie de fonctions
Justement, non. C'est le but de l'utilisation de inline dans ce cas.
Non. inline a deux effets: permettre la definition d'une fonction dans plusieurs unites de compilation, indiquer au compilateur qu'on aimerait bien qu'il daigne essayer de supprimer remplacer les appels a la fonction en les remplacant par le corps de la fonction correctement modifie pour ne pas changer le comportement visible.
Ce n'est pas un metaprogramme qui retourne la factorielle de l'argument template: le resultat n'est pas utilisable a la compilation.
Cela remplace Factorielle<5>() par 1.0*1*2*3*4*5
Ca ne remplace certainement pas Factorielle<5>() par quoi que ce soit. Ca n'agit pas au niveau textuel ni meme des symboles. Ca defini une fonction comme
Et comme elle fait des calculs constants il y a plus de chances qu'elle soit reellement inlinee qu'un appel comme factorielle(5) mais ce n'est pas obligatoire (et factorielle(5) peut etre inline -- Sun CC me le fait bien pour factorielle(4) mais pas pour factorielle(5))
Note qu'une partie du gain de perf optenable par la metaprogrammation resulte du fait qu'on peut generer des fonctions plus facilement inlinable, mais la metaprogrammation est soit c'est la generation de code (reorganiser du code avec les expressions templates pour changer le flux de donnees, pouvoir utiliser Fact<5> plutot que 120 comme taille d'un tableau de taille fixe contenant les permutations de 5 objets, ...)
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
loufoque <loufoque@remove.gmail.com> writes:
Ceci est un metaprogramme qui genere une serie de fonctions
Justement, non.
C'est le but de l'utilisation de inline dans ce cas.
Non. inline a deux effets: permettre la definition d'une fonction dans
plusieurs unites de compilation, indiquer au compilateur qu'on
aimerait bien qu'il daigne essayer de supprimer remplacer les appels a
la fonction en les remplacant par le corps de la fonction correctement
modifie pour ne pas changer le comportement visible.
Ce n'est pas un metaprogramme qui retourne la factorielle de
l'argument template: le resultat n'est pas utilisable a la
compilation.
Cela remplace Factorielle<5>() par 1.0*1*2*3*4*5
Ca ne remplace certainement pas Factorielle<5>() par quoi que ce soit.
Ca n'agit pas au niveau textuel ni meme des symboles. Ca defini une
fonction comme
Et comme elle fait des calculs constants il y a plus de chances
qu'elle soit reellement inlinee qu'un appel comme factorielle(5) mais
ce n'est pas obligatoire (et factorielle(5) peut etre inline -- Sun CC
me le fait bien pour factorielle(4) mais pas pour factorielle(5))
Note qu'une partie du gain de perf optenable par la metaprogrammation
resulte du fait qu'on peut generer des fonctions plus facilement
inlinable, mais la metaprogrammation est soit c'est la generation de
code (reorganiser du code avec les expressions templates pour changer
le flux de donnees, pouvoir utiliser Fact<5> plutot que 120 comme
taille d'un tableau de taille fixe contenant les permutations de 5
objets, ...)
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
Ceci est un metaprogramme qui genere une serie de fonctions
Justement, non. C'est le but de l'utilisation de inline dans ce cas.
Non. inline a deux effets: permettre la definition d'une fonction dans plusieurs unites de compilation, indiquer au compilateur qu'on aimerait bien qu'il daigne essayer de supprimer remplacer les appels a la fonction en les remplacant par le corps de la fonction correctement modifie pour ne pas changer le comportement visible.
Ce n'est pas un metaprogramme qui retourne la factorielle de l'argument template: le resultat n'est pas utilisable a la compilation.
Cela remplace Factorielle<5>() par 1.0*1*2*3*4*5
Ca ne remplace certainement pas Factorielle<5>() par quoi que ce soit. Ca n'agit pas au niveau textuel ni meme des symboles. Ca defini une fonction comme
Et comme elle fait des calculs constants il y a plus de chances qu'elle soit reellement inlinee qu'un appel comme factorielle(5) mais ce n'est pas obligatoire (et factorielle(5) peut etre inline -- Sun CC me le fait bien pour factorielle(4) mais pas pour factorielle(5))
Note qu'une partie du gain de perf optenable par la metaprogrammation resulte du fait qu'on peut generer des fonctions plus facilement inlinable, mais la metaprogrammation est soit c'est la generation de code (reorganiser du code avec les expressions templates pour changer le flux de donnees, pouvoir utiliser Fact<5> plutot que 120 comme taille d'un tableau de taille fixe contenant les permutations de 5 objets, ...)
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