Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
892 connectés 

  FORUM HardWare.fr
  Programmation
  C++

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°660219
koulip31
Posté le 01-03-2004 à 17:35:40  profilanswer
 

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  

mood
Publicité
Posté le 01-03-2004 à 17:35:40  profilanswer
 

n°660238
Taz
bisounours-codeur
Posté le 01-03-2004 à 18:20:11  profilanswer
 

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
 

n°660554
koulip31
Posté le 02-03-2004 à 01:59:27  profilanswer
 

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()  
 

n°660555
Taz
bisounours-codeur
Posté le 02-03-2004 à 02:03:54  profilanswer
 

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

n°660974
koulip31
Posté le 02-03-2004 à 15:00:55  profilanswer
 

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  :(  

n°660984
Taz
bisounours-codeur
Posté le 02-03-2004 à 15:11:20  profilanswer
 

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

n°661017
koulip31
Posté le 02-03-2004 à 15:38:43  profilanswer
 

Taz a écrit :

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


ca presse pas ;)

n°661072
BENB
100% Lux.
Posté le 02-03-2004 à 16:10:51  profilanswer
 

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...
 

n°661671
LeGreg
Posté le 03-03-2004 à 08:58:06  profilanswer
 

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

n°662170
koulip31
Posté le 03-03-2004 à 15:19:38  profilanswer
 

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

mood
Publicité
Posté le 03-03-2004 à 15:19:38  profilanswer
 

n°662251
Taz
bisounours-codeur
Posté le 03-03-2004 à 21:19:24  profilanswer
 

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

n°662358
koulip31
Posté le 03-03-2004 à 23:44:41  profilanswer
 

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 ?

n°662366
Taz
bisounours-codeur
Posté le 04-03-2004 à 00:11:35  profilanswer
 

si t'en as besoin oui

n°663126
BENB
100% Lux.
Posté le 04-03-2004 à 17:13:51  profilanswer
 

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...

n°663755
koulip31
Posté le 04-03-2004 à 23:57:09  profilanswer
 

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

n°663795
Taz
bisounours-codeur
Posté le 05-03-2004 à 00:29:42  profilanswer
 

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

n°663855
koulip31
Posté le 05-03-2004 à 07:46:47  profilanswer
 

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)  

n°663857
Taz
bisounours-codeur
Posté le 05-03-2004 à 07:54:57  profilanswer
 

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 ?

n°663872
LeGreg
Posté le 05-03-2004 à 08:34:29  profilanswer
 

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.

n°663875
Taz
bisounours-codeur
Posté le 05-03-2004 à 08:38:18  profilanswer
 

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

n°665032
el muchach​o
Comfortably Numb
Posté le 06-03-2004 à 01:51:38  profilanswer
 

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
n°670753
el muchach​o
Comfortably Numb
Posté le 11-03-2004 à 14:28:09  profilanswer
 

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.

n°670757
Taz
bisounours-codeur
Posté le 11-03-2004 à 14:30:53  profilanswer
 

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

n°670765
el muchach​o
Comfortably Numb
Posté le 11-03-2004 à 14:39:31  profilanswer
 

???

n°670776
Taz
bisounours-codeur
Posté le 11-03-2004 à 14:57:56  profilanswer
 

ben essaie donc scons

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

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

 

Sujets relatifs
[vb]erreur method or data member not found[reglé][Réglé] cacher un champ
problème pour lire ma base de données, PROBLEME REGLE ;)[Réglé] Deux instructions similaires, deux résultats différents ?!!!
[php]une erreur que je ne comprend pas[reglé]Tester l'existence d'un répertoire [REGLE !!!]
probleme d'integration de script php !! need assistance ![PHP] Récuperer un code HTML déjà généré ? (explication inside)
Noob en batch need help - Size & date check neededchamps de bits, need help
Plus de sujets relatifs à : [C++] effective C++ (regle 34) (need explication)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR