OVH Cloud OVH Cloud

template contraint ?

15 réponses
Avatar
Aurélien Barbier-Accary
Bonjour et bonne année,

Je souhaite écrire une classe qui hérite d'une classe template qui en pratique
doit être fille d'une classe mère connue. Est-il possible de spécifier cette
contrainte ? et si oui comment bien sûr ? :-) Si vous connaissez un bon lien sur
de la documentation, je suis preneur (je n'ai pas encore réussi à trouver).

class mere;
class fille1; // hérite de mere
class fille2; // hérite de mere mais n'a aucun lien avec fille1

template <class T> // T doit être une fille de mere
class maclasse : public T
{
//...
};

Merci d'avance.
Aurélien.

5 réponses

1 2
Avatar
Marc Boyer
Le 08-01-2006, Fabien LE LEZ a écrit :
On Sun, 08 Jan 2006 11:00:59 +0100, Aurélien Barbier-Accary :
En fait (je ne suis pas sûr d'avoir raison mais) j'essaye de ne pas utiliser
Boost pour réduire ma dépendance à de trop nombreuses bibliothèques (je dois
déjà utiliser Qt et CGAL).


Il y a un phénomène qui joue contre Boost : à chaque fois qu'on
pourrait l'utiliser, on se dit qu'installer Boost, c'est beaucoup de
travail par rapport au petit problème qu'on a sur le moment, et on
fait soi-même sa petite classe.


En effet. Si en plus on veut fournir le code, cela impose
aux destinataires d'installer eux aussi Boost.

Mais sur la longueur, il y a tellement de choses là-dedans que
l'intégrer dans un projet peut être très intéressant.


Merci de ce retour d'expérience, je vais peut-être faire
le saut.

Marc Boyer
--
Entre le fort et le faible, c'est la liberte qui opprime et le droit
qui libere. Henri Lacordaire, Dominicain


Avatar
Fabien LE LEZ
On Mon, 9 Jan 2006 08:08:01 +0000 (UTC), Marc Boyer :

Si en plus on veut fournir le code, cela impose
aux destinataires d'installer eux aussi Boost.


Si le destinataire a le même compilo que toi, tu peux fournir la
bibliothèque compilée, ça sera déjà plus simple.
D'autre part, même si tu ne compiles pas la bibliothèque, tu peux
utiliser les parties qui sont entièrement contenues dans des .h.

Avatar
Marc Duflot
Aurélien Barbier-Accary wrote:

Regarde du côté de Boost.TypeTraits :

BOOST_STATIC-ASSERT(is_base_of<mere, T>::value)

(non-testé).



Merci.
En fait (je ne suis pas sûr d'avoir raison mais) j'essaye de ne pas
utiliser Boost pour réduire ma dépendance à de trop nombreuses
bibliothèques (je dois déjà utiliser Qt et CGAL).
Il faudra quand même que je me penche un peu plus sur Boost un de ces
jours.


Ça me semble une erreur de ne pas utiliser systématiquement boost.

J'ajoute que, dans le cas présent, les type traits font partie du TR1
donc il se peut que tu n'aies même pas besoin de boost si tu utilises un
compilateur récent.

Marc


Avatar
kanze
Aurélien Barbier-Accary wrote:
[...] Dans ces cas-là, je n'hésiterais pas
à utiliser des métaprogrammes existants, surtout de Boost, mais
j'aurais des réticences à en développer des propres moi-même.


Merci pour cette mise en garde.
Je n'ai pas encore commencé à faire de la méta-programmation
mais j'y réfléchirai donc à deux fois.


N'oublie pas alors le « dans ces cas-là ». Je parlais d'une
contexte bien précise : j'écris du code qui doit être mainenu
par d'autres personnes. Actuellement, je ne crois pas qu'on
puisse réalistiquement s'attendre à ce qu'un programmeur C++
moyen comprend du code qui utilise la métaprogrammation sans un
effort particulier.

S'il n'y a que toi qui dois maintenir le code, ou un petit
groupe où tout le monde est d'accord pour utiliser la
métaprogrammation, c'est autre choses. Et je dirais même que tu
dois y expérimenter un peu, dans le code que tu écris pour
toi-même, afin de t'y mettre au courant.

En tous cas l'idée est très stimulante...


Tout à fait. (Mais n'oublie pas non plus les possibilités de la
génération du code externe.)

--
James Kanze GABI Software
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
Pierre Barbier de Reuille
On Mon, 9 Jan 2006 08:08:01 +0000 (UTC), Marc Boyer :


Si en plus on veut fournir le code, cela impose
aux destinataires d'installer eux aussi Boost.



Si le destinataire a le même compilo que toi, tu peux fournir la
bibliothèque compilée, ça sera déjà plus simple.
D'autre part, même si tu ne compiles pas la bibliothèque, tu peux
utiliser les parties qui sont entièrement contenues dans des .h.



Juste pour appuyer :)

Parce que j'ai utilisé Boost au départ pour la bibliothèque Boost.Python
(ce qui a levé la barrière du "c'est lourd à installer") et du coup je
l'utilise de plus en plus, et c'est vraiment très bien ! Les
abstractions sont bien faites et l'implémentation est, le plus souvent,
à la hauteur ...

Par ailleurs, la plupart des libs sont purement en headers (template
oblige) et il est très facile de les extraire pour les inclure (avec la
bonne licence) dans ton projet ... du coup pour 90% du code de Boost, y
a pas d'installation à faire, juste à pointer sur le bon répertoire lors
des includes !

Pierre


1 2