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

10 réponses

1 2 3
Avatar
Sylvain SF
James Kanze wrote on 09/05/2008 10:53:

Je te conseille le Vandevoorde et Josuttis : il décrit en
détail ce genre de chose, et c'est extrèmement bien écrit. Dans
ce cas-ci, grosso modo : [...]


merci pour toutes tes explications (à Fabien également),
c'est beaucoup plus clair avec. un peu de lecture, V&J,
serait bienvenue en effet.

Sylvain.

Avatar
espie
In article ,
James Kanze wrote:
Je te conseille le Vandevoorde et Josuttis : il décrit en
détail ce genre de chose, et c'est extrèmement bien écrit. Dans
ce cas-ci, grosso modo :

La principe de base, c'est de se servir de la résolution du
surcharge des fonctions (dont des fonctions templatées) pour
choisir selon les caractèristiques du type. Mais évidemment, on
ne veut pas réelement appeler les fonctions, ce qui de toute
façon ne se fera que lors de l'exécution. L'astuce, ici, c'est
de se servir de sizeof pour obtenir une constante de compilation
qui dépend de la résolution du surcharge : sizeof( func(...) )
vaut la taille du type du rétour de la fonction, et le
compilateur effectue bien la résolution du surcharge sans jamais
appeler la fonction.


Tiens, moi j'avais lu ca chez Alexandrescu, qui decrit aussi tres en
detail ce genre de choses, et pas mal d'autres trucs tres space.

La moquette de Vandevoorde et Josuttis est de meme qualite ? pour pondre
des trucs pareils, c'est clair qu'Alexandrescu fume du tres bon synthetique...

Avatar
Fabien LE LEZ
On Fri, 9 May 2008 10:48:58 +0000 (UTC), (Marc Espie):

pour pondre
des trucs pareils, c'est clair qu'Alexandrescu fume du tres bon synthetique...


Et encore, t'as rien vu : le chapitre 2 est un recensement de quelques
petites techniques de base pour construire les choses sérieuses à
partir du chapitre 3.

Avatar
Fabien LE LEZ
On Fri, 09 May 2008 11:10:33 +0200, jeremie fouche :

En fait, je pensais qu'on pouvait faire un truc dans le genre sans
passer par de gros trucs.


Tu remarqueras que la modification dans ton code se résume à une seule
ligne, relativement compréhensible :

STATIC_CHECK (SUPERSUBCLASS_STRICT (A, T), T_doit_deriver_de_A);

Effectivement, l'implémentation (dans les .h) est un peu plus
compliquée, mais nettement plus simple et plus courte que celle d'un
truc aussi basique que std::string.

Avatar
espie
In article ,
Fabien LE LEZ wrote:
On Fri, 9 May 2008 10:48:58 +0000 (UTC), (Marc Espie):

pour pondre
des trucs pareils, c'est clair qu'Alexandrescu fume du tres bon synthetique...


Et encore, t'as rien vu : le chapitre 2 est un recensement de quelques
petites techniques de base pour construire les choses sérieuses à
partir du chapitre 3.


Faudra que tu prennes des cours de lecture de posts, hein. J'ai lu tout
le bouquin d'Alexandrescu.


Avatar
Gabriel Dos Reis
(Marc Espie) writes:

| In article ,
| Fabien LE LEZ wrote:
| >On Fri, 9 May 2008 10:48:58 +0000 (UTC), (Marc Espie):
| >
| >> pour pondre
| >>des trucs pareils, c'est clair qu'Alexandrescu fume du tres bon synthet ique...
|
| >Et encore, t'as rien vu : le chapitre 2 est un recensement de quelques
| >petites techniques de base pour construire les choses sérieuses à  
| >partir du chapitre 3.
|
| Faudra que tu prennes des cours de lecture de posts, hein. J'ai lu tout
| le bouquin d'Alexandrescu.

Je crois que Fabien voulait dire qu'il a lu le chapitre 2, et qu'il
est en train de lire le chapitre 3 ;-}

-- Gaby
Avatar
vandevoorde
On May 9, 6:48 am, (Marc Espie) wrote:
[...]
La moquette deVandevoordeet Josuttis est de meme qualite ? pour pondre
des trucs pareils, c'est clair qu'Alexandrescu fume du tres bon synthetiqu e...


Non, c'est du parquet chez nous, mais le bois exotique c'est
interessant aussi... ;-)

David

Avatar
Fabien LE LEZ
On 09 May 2008 15:00:15 -0500, Gabriel Dos Reis :

Je crois que Fabien voulait dire qu'il a lu le chapitre 2, et qu'il
est en train de lire le chapitre 3 ;-}


Non, je faisais référence au début de la discussion. Ou plutôt, je
croyais à tort que Marc faisait référence au début de la discussion.
Enfin bon, comme d'hab', j'ai répondu à un message sans le lire :-/

Avatar
Gabriel Dos Reis
writes:

| On May 9, 6:48 am, (Marc Espie) wrote:
| [...]
| > La moquette deVandevoordeet Josuttis est de meme qualite ? pour pondre
| > des trucs pareils, c'est clair qu'Alexandrescu fume du tres bon synthetique...
|
| Non, c'est du parquet chez nous, mais le bois exotique c'est
| interessant aussi... ;-)
|
| David

Il faudrait que tu en ramènes à Sophia Antipolis, le mois prochain --
cela pourrait aider après des journées tendues :-).

-- Gaby
Avatar
James Kanze
On 9 mai, 12:48, (Marc Espie) wrote:
In article
,
James Kanze wrote:

Je te conseille le Vandevoorde et Josuttis : il décrit en
détail ce genre de chose, et c'est extrèmement bien écrit. Dans
ce cas-ci, grosso modo :

La principe de base, c'est de se servir de la résolution du
surcharge des fonctions (dont des fonctions templatées) pour
choisir selon les caractèristiques du type. Mais évidemment, on
ne veut pas réelement appeler les fonctions, ce qui de toute
façon ne se fera que lors de l'exécution. L'astuce, ici, c'est
de se servir de sizeof pour obtenir une constante de compilation
qui dépend de la résolution du surcharge : sizeof( func(...) )
vaut la taille du type du rétour de la fonction, et le
compilateur effectue bien la résolution du surcharge sans jamais
appeler la fonction.


Tiens, moi j'avais lu ca chez Alexandrescu, qui decrit aussi
tres en detail ce genre de choses, et pas mal d'autres trucs
tres space.

La moquette de Vandevoorde et Josuttis est de meme qualite ?
pour pondre des trucs pareils, c'est clair qu'Alexandrescu
fume du tres bon synthetique...


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, plutôt que d'essayer des
choses pratiques et utilisables. Le Vandevoorde et Josuttis
explique les détails de tous ce qui concerne les templates --
j'avoue qu'il y avait beaucoup que je n'avais pas compris avant
de l'avoir lu. Je y ai trouvé une bonne équilibre entre le
théorique, et ce qui est peut-être possible, et la pratique,
c-à-d ce dont on peut réelement se servir. Et comme j'ai dit,
c'est exceptionnellement bien écrit.

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