Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

assurer l'héritage d'un template

25 réponses
Avatar
jeremie fouche
Bonsoir
Je ne savais pas trop quel titre donner à mon post. Ce que je souhaite,
c'est assurer qu'un membre template hérite d'une classe donnée.

un bon exemple vaut mieux qu'un long discourt :

#include <iostream>

class A
{
public:
A() {}
void Do() { std::cout << "A" << std::endl; }
};

class B : public A
{
public:
B() {}
void Do() { std::cout << "B" << std::endl; }
};

class C
{
public:
C() {}
void Do() { std::cout << "C" << std::endl; }
};

class D
{
public:
D() {}

void Test()
{
Do<B>(); // OK, ca doit compiler
Do<A>(); // ne doit pas compiler
Do<C>(); // ne doit pas compiler
}

// template <class T : public A> ne fonctionne pas, dommage
template <class T>
void Do(void)
{
T t;
t.Do();
}
};

int main()
{
D d;
d.Test();
return 0;
}

C'est possible ?
Si oui, comment ?
Merci
--
Jérémie

5 réponses

1 2 3
Avatar
Fabien LE LEZ
On Sat, 10 May 2008 06:53:06 -0700 (PDT), James Kanze
:

Je ne peux pas dire ; je n'ai jamais lu Alexandrescu. A priori,
d'après ces articles dans les news et dans des journaux, il me
donnait l'impression de s'amuser,


J'ai l'impression qu'il y a deux visions des choses :

- "Effective C++" (Meyers) et "C++ Templates - The Complete Guide"
(Vandevoorde, Josuttis) sont des livres "de bas en haut" : ce sont des
cours où on indique les "bases" (même si le niveau final peut être
assez haut).

- "Exceptional C++" et "More Exceptional C++" (Sutter) et "Modern C++
Design" (Alexandrescu) sont des livres "de haut en bas" : ils
explorent les limites du langage, et en profitent tout de même pour
donner assez de "bases" pour que le lecteur puisse suivre.

Il me semble que chacun appréciera telle ou telle méthode selon sa
propre sensibilité. Personnellement, je préfère la seconde : profiter
de l'exposé de trucs bien tordus pour comprendre les mécanismes de
base.


plutôt que d'essayer des choses pratiques et utilisables.


Le livre "Modern C++ Design" est tout de même la description d'une
bibliothèque d'usage général (Loki). Par exemple, le but du chapitre 6
est d'implémenter une classe "singleton", utilisable dans un grand
nombre de cas (grâce au "policies"), pour éviter au programmeur
d'avoir à réimplémenter ce design pattern à chaque fois. J'avoue
n'avoir pas encore utilisé cette bibliothèque (pas plus que Boost
d'ailleurs), mais le but est éminemment pratique.

Avatar
Jean-Marc Desperrier
Fabien LE LEZ wrote:
[...] Par exemple, le but du chapitre 6
est d'implémenter une classe "singleton", utilisable dans un grand
nombre de cas (grâce au "policies"), pour éviter au programmeur
d'avoir à réimplémenter ce design pattern à chaque fois. J'avoue
n'avoir pas encore utilisé cette bibliothèque (pas plus que Boost
d'ailleurs), mais le but est éminemment pratique.


But éminemment pratique me semble mal désigner une pratique qui en fin
de compte est mauvaise.

Fondamentalement, l'intérêt des singleton se réduit au fait que le jour
où on fera l'effort de refactoriser pour supprimer cette dépendance sur
un objet global unique, ce sera un peu plus facile que si on avait
utilisé une variable globale.

Avatar
James Kanze
On May 13, 10:39 am, Jean-Marc Desperrier
wrote:
Fabien LE LEZ wrote:
[...] Par exemple, le but du chapitre 6
est d'implémenter une classe "singleton", utilisable dans un grand
nombre de cas (grâce au "policies"), pour éviter au programmeur
d'avoir à réimplémenter ce design pattern à chaque fois. J'avoue
n'avoir pas encore utilisé cette bibliothèque (pas plus que Boost
d'ailleurs), mais le but est éminemment pratique.


But éminemment pratique me semble mal désigner une pratique
qui en fin de compte est mauvaise.

Fondamentalement, l'intérêt des singleton se réduit au fait
que le jour où on fera l'effort de refactoriser pour supprimer
cette dépendance sur un objet global unique, ce sera un peu
plus facile que si on avait utilisé une variable globale.


L'intérêt des singleton, c'est qu'il y a des classes qui
représentent des entités qui sont par leur nature unique. En
C++, un intérêt supplémentaire, souvent, c'est qu'ils permettent
à gérer l'ordre d'initialisation.

Quant à l'intérêt d'alourdir un concept fondamentalement assez
simple avec des policies multiples, en revanche...

--
James Kanze (GABI Software) email:
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


Avatar
espie
In article ,
James Kanze wrote:
Quant à l'intérêt d'alourdir un concept fondamentalement assez
simple avec des policies multiples, en revanche...


Alexandrescu a des exemples plus utiles, quand meme.
Le chapitre sur les smart pointers, qui utilise les memes techniques,
est quand meme plus sympa.

Mais bon, c'est clair que dans son bouquin, c'est quand meme la premiere
partie (Techniques) la plus interessante. Je soupconne que la 2e est
tres utile a quelqu'un qui a besoin d'exemples concrets pour comprendre
la premiere...

Avatar
James Kanze
On May 13, 11:54 am, (Marc Espie) wrote:
In article
,
James Kanze wrote:

Quant à l'intérêt d'alourdir un concept fondamentalement assez
simple avec des policies multiples, en revanche...


Alexandrescu a des exemples plus utiles, quand meme.


Certes. En fait, je ne nies pas l'utilité des policies en
général -- mon propre Singleton en a même (pour choisir s'il
faut appeler le destructeur ou non). Mais c'est un résultat d'un
besoin réel (et j'ai hésité longtemps avant de l'introduire) --
j'ai souvent l'impression avec Alexandrescu qu'il essaie de
couvrir tous les cas, utiles ou non, et en ce faisant, il
introduit de la complexité inutile.

Le chapitre sur les smart pointers, qui utilise les memes
techniques, est quand meme plus sympa.


C'est très intéressant, techniquement, comme exemple de ce qui
est possible. Dans la pratique, je trouve la solution Boost plus
« manageable ».

Mais bon, c'est clair que dans son bouquin, c'est quand meme
la premiere partie (Techniques) la plus interessante. Je
soupconne que la 2e est tres utile a quelqu'un qui a besoin
d'exemples concrets pour comprendre la premiere...


Je ne nie pas l'intérêt du bouquin. Il en faut à beaucoup de
niveau pour que la technologie avance. Seulement, je doute
l'utilité immédiate de ces classes dans des applications
industrielles d'aujourd'hui, et encore plus quand le livre est
apparu. AMHA, il faut le comprendre plutôt comme de
l'expériementation -- voici ce qu'on *peut* faire avec C++, et
non voici ce qu'il faut faire systèmatiquement. Avec le temps,
évidemment, la technologie évolue, et parmi ces choses qu'on
peut faire, certaines deviendront réelement pratiques, voire
même usuelles, et d'autres disparaîtront faute d'une utilité
réele ou parce qu'ils créent plus de problèmes qu'ils n'en
résoudent.

--
James Kanze (GABI Software) email:
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


1 2 3