Si je veux cacher les entrailles d'une classe, et ne montrer à son
utilisateur que les fonctions publiques, j'ai en gros le choix entre :
- l'idiome pimpl :
// .h
class C
{
public:
void f();
private:
class Implementation;
Implementation* pimpl;
};
// .cpp
void C::f()
{
pimpl-> f();
}
- l'idiome "classe de base abstraite" :
// .h
class C
{
public:
virtual void f()= 0;
};
// .cpp
class Implementation: public C
{
void f()
{
// Le code ici
}
}
Mon problème, c'est que je viens de m'apercevoir que je choisis entre
ces deux méthodes plus ou moins au hasard, suivant celle qui me vient
à l'esprit en premier.
Y a-t-il des critères rationnels pour choisir ?
Note : il s'agit généralement de classes à sémantique d'entité, non
copiables.
Oui, en gros, moi je fait confiance au compilateur car je le pense capable de faire mieux aue moi, et toi tu connais assez le C++ et les compilateurs pour savoir là ou tu seras capable de faire mieux.
Ce qui est pratiquement jamais. C'est le profiler qui me dit où il faut toucher à quelque chose, et alors, j'expérimente jusqu'à trouver quelque chose qui marche. Jusqu'ici, je ne suis jamais descendu jusqu'à l'assembleur. (Depuis que je fais du C++, et que les machines courantes ont acquis une certaine puissance. J'ai commencé en assembleur, il y a pas mal d'années.)
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
Marc Boyer wrote:
[SNIP des explications très claires]
Oui, en gros, moi je fait confiance au compilateur
car je le pense capable de faire mieux aue moi, et
toi tu connais assez le C++ et les compilateurs
pour savoir là ou tu seras capable de faire mieux.
Ce qui est pratiquement jamais. C'est le profiler qui me dit où
il faut toucher à quelque chose, et alors, j'expérimente jusqu'à
trouver quelque chose qui marche. Jusqu'ici, je ne suis jamais
descendu jusqu'à l'assembleur. (Depuis que je fais du C++, et
que les machines courantes ont acquis une certaine puissance.
J'ai commencé en assembleur, il y a pas mal d'années.)
--
James Kanze mailto: james.kanze@free.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
Oui, en gros, moi je fait confiance au compilateur car je le pense capable de faire mieux aue moi, et toi tu connais assez le C++ et les compilateurs pour savoir là ou tu seras capable de faire mieux.
Ce qui est pratiquement jamais. C'est le profiler qui me dit où il faut toucher à quelque chose, et alors, j'expérimente jusqu'à trouver quelque chose qui marche. Jusqu'ici, je ne suis jamais descendu jusqu'à l'assembleur. (Depuis que je fais du C++, et que les machines courantes ont acquis une certaine puissance. J'ai commencé en assembleur, il y a pas mal d'années.)
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34