[C++] effective C++ (regle 34) (need explication)

effective C++ (regle 34) (need explication) [C++] - C++ - Programmation

Marsh Posté le 01-03-2004 à 17:35:40    

dans le effective C++ de scot meyers je ne comprend pas comment il fais dans le chapitre intitulé "minimisez les dependances et compilation entre fichier"
 
qu'entend t'il dans son exemple par  //pointeur sur l'implementation
 
du code de l'exemple Person  
 
il declare une classe PersonImpl ;   (non fournie dans l'exemple)
et je vois pas a quoi elle peut resembler  [:sisicaivrai]  
si kkn peux m'aider ca serrais cool  

Reply

Marsh Posté le 01-03-2004 à 17:35:40   

Reply

Marsh Posté le 01-03-2004 à 18:20:11    

classe.hpp : délcaration anticipée de la classe Implementation. Ben comme membre dans ta classe y a que Implementation *pimpl;
 
classe.cpp : include "implementation.hpp" et utilisation simple genre pimpl->foo()
 
main.cpp : include "classe.hpp"
 
maintenant, si tu modifies implementation.[ch]pp, ni classe.cpp ni main.cpp n'ont besoin d'être recompiler
 

Reply

Marsh Posté le 02-03-2004 à 01:59:27    

Taz a écrit :

classe.hpp : délcaration anticipée de la classe Implementation. Ben comme membre dans ta classe y a que Implementation *pimpl;
 
classe.cpp : include "implementation.hpp" et utilisation simple genre pimpl->foo()
 
main.cpp : include "classe.hpp"
 
maintenant, si tu modifies implementation.[ch]pp, ni classe.cpp ni main.cpp n'ont besoin d'être recompiler


 
oui mais  comment tu affecte le pointeur de la classe implementation a la classe personne c'est ce que je saisit pas
 
car il a une classe personne qui contiens un pointeur sur une classe impelmentation  
 
mais l'implementation et la classe personnes son 2 classe distincts
dans ce que jai compris donc on peux pas faire
 implementation->methode_de_la classe_personne()  
 

Reply

Marsh Posté le 02-03-2004 à 02:03:54    

si je te fais un .tar tu me fiche la paix ?

Reply

Marsh Posté le 02-03-2004 à 15:00:55    

Taz a écrit :

si je te fais un .tar tu me fiche la paix ?


 
 :??: faché ?
ben si tu a un exemple complet oui ca m'interesserais car je suis sur que c'est tout con  :(  

Reply

Marsh Posté le 02-03-2004 à 15:11:20    

non, mais là aujourd'hui j'ai plus le temps

Reply

Marsh Posté le 02-03-2004 à 15:38:43    

Taz a écrit :

non, mais là aujourd'hui j'ai plus le temps


ca presse pas ;)

Reply

Marsh Posté le 02-03-2004 à 16:10:51    

koulip31 a écrit :


 
oui mais  comment tu affecte le pointeur de la classe implementation a la classe personne c'est ce que je saisit pas
 
car il a une classe personne qui contiens un pointeur sur une classe impelmentation  
 
mais l'implementation et la classe personnes son 2 classe distincts
dans ce que jai compris donc on peux pas faire
 implementation->methode_de_la classe_personne()  
 
 


 
Tu fais cela dans le constructeur, mais là ca n'a plus d'importance car le code du constructeur se trouve dans le .cxx et non dans le header et le but est de reduire les dependances etre header.
 
Imagine que tu soit en train de fiare une shared-library (ou une Dll) a vendre a un client : tu cherches a faire des .hxx les plus conpacts et evitant de lui donner toutes tes structures...
 

Reply

Marsh Posté le 03-03-2004 à 08:58:06    

Il faut tout de meme noter que meme si le nom du bouquin c'est
"effective C++", c'est un schema a éviter en regle general.
 
Mais comme on dit ça peut toujours servir..
 
LeGreg

Reply

Marsh Posté le 03-03-2004 à 15:19:38    

mais comme dit dans le livre
ty perd en rap d'exec
mais tu y gagne en temps de compil
non?

Reply

Marsh Posté le 03-03-2004 à 15:19:38   

Reply

Marsh Posté le 03-03-2004 à 21:19:24    

tu perds 3 fois rien en exec, une indirection, y a pas de quoi fouetter un chat :D

Reply

Marsh Posté le 03-03-2004 à 23:44:41    

Taz a écrit :

tu perds 3 fois rien en exec, une indirection, y a pas de quoi fouetter un chat :D


donc c'est interessant ?

Reply

Marsh Posté le 04-03-2004 à 00:11:35    

si t'en as besoin oui

Reply

Marsh Posté le 04-03-2004 à 17:13:51    

koulip31 a écrit :

mais comme dit dans le livre
ty perd en rap d'exec
mais tu y gagne en temps de compil
non?


 
La perte en vitesse d'execution est difficile a évaluer...
cela depend des chemin d'appels que tu prends : si tu n'appelles les dites fonctions qu'une fois dans le prog... effectivement les pertes seront invisibles
 
par contre s'il y a de nombreux appels via cette indirection le cout augmente...  
Avec les proc modernes qui tournent bcp plus vite que la mémoire, qui ont des memoire rapides en débit mais avec des temps de latence médiocres...   enfin bref en abuser avec un P4 peut finir par avoir un effet...

Reply

Marsh Posté le 04-03-2004 à 23:57:09    

Taz a écrit :

si t'en as besoin oui


 
ben perso je cherche a diminuer le temps de compil car la
bien que le projet soit pas gargantuesque ,
 viva les pauses café a chaque recompil donc je me suis dis tien pourquoi aps apliquer cela :) ca ma lair plutot sympa et ingenieux
apres effectivemnt faudrais que je fasse un bech pour voir si j'y perd tant que ca en exec

Reply

Marsh Posté le 05-03-2004 à 00:29:42    

ça veut dire quoi long ? t'es sur de déjà savoir bien de servir des #include ?

Reply

Marsh Posté le 05-03-2004 à 07:46:47    

Taz a écrit :

ça veut dire quoi long ? t'es sur de déjà savoir bien de servir des #include ?


 
qu'entend tu par la ?  
 
mis a part eviter les double reinclusions et inclure seulement les fichiers necessaire pour compiler la classe je ne fais rien de special au niveau des includes (si je les mets tous dans le .hh)  

Reply

Marsh Posté le 05-03-2004 à 07:54:57    

l'erreur la plus commune, c'est de foutre tous les #include dans le .h, et dans le .c, include le dit .h et rien d'autres.
 
avant de tout reconstruire, t'as essayé de te tourner vers d'autres solutions peut être plus simple à mettre en action ? je sais pas moi, genre ccache ?

Reply

Marsh Posté le 05-03-2004 à 08:34:29    

Precompiled header par exemple.
 
Sinon une solution qui marche bien c'est
de faire un gros fichier.cpp à partir de tous les petits .cpp
à la compilation ("cat" ou un truc du genre) et de lancer la compile. C'est la plus rapide pour une compilation "from scratch". Enfin certains compilos vont avoir des problemes avec les TRES gros sources (arrivé sur mon précédent projet) mais si c'est bien segmenté ça passe.

Reply

Marsh Posté le 05-03-2004 à 08:38:18    

avec gcc y a pas mal de bêtises à faire, à commencer par le -pipe et après lancer make -jN

Reply

Marsh Posté le 06-03-2004 à 01:51:38    

Il y a une discussion de pimpl et de "fast pimpl" sur le site de Herb Sutter :  
http://www.gotw.ca/gotw/024.htm
http://www.gotw.ca/gotw/028.htm
(au passage, l'article sur les Smart pointer members est plus intéressant)
 
Mais effectivement, avant de recourir à ce genre de bidouilles, la première chose à faire est de supprimer un maximum de #include des .h et de déclarer les classes nécessaires à la compile à la place d'include dans les .h
 
Faire:
class machin;
class chose;
 
plutot que :
#include "machin.h"
#include "chose.h"
 
Après étudier les options qu'offrent le compilo. Enfin, la méthode de LeGreg (que je ne connaissais pas) semble assez astucieuse si les header précompilés n'existent pas avec ton compilo.  
 
Mais le mieux si tu as la chance d'avoir un PC multiprocesseur (ou un réseau), est d'essayer l'outil gratuit jam à la place de make : il trouve les dépendances tout seul à partir des fichiers source (plus besoin de les spécifier), et il répartit les compilations sur les différents processeurs en tenant compte des dépendances.
 
http://www.perforce.com/jam/jam.html


Message édité par el muchacho le 06-03-2004 à 01:57:03
Reply

Marsh Posté le 11-03-2004 à 14:28:09    

Dans le même genre que jam, je viens de découvrir Cmake :
http://www.cmake.org
 
Pas essayé, mais ça a l'air pas mal.

Reply

Marsh Posté le 11-03-2004 à 14:30:53    

el muchacho a écrit :

Dans le même genre que jam, je viens de découvrir Cmake :
http://www.cmake.org
 
Pas essayé, mais ça a l'air pas mal.

pitié !
 
www.scons.org

Reply

Marsh Posté le 11-03-2004 à 14:39:31    

???

Reply

Marsh Posté le 11-03-2004 à 14:57:56    

ben essaie donc scons

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed