IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++/CLI Discussion :

Template - Borne sup�rieure


Sujet :

C++/CLI

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre habitu�
    Homme Profil pro
    �tudiant
    Inscrit en
    F�vrier 2014
    Messages
    11
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2014
    Messages : 11
    Par d�faut Template - Borne sup�rieure
    Bonjour � tous,

    Je souhaiterais utiliser un template dans une classe, mais en imposant une borne sup�rieure au type d�fini dans le template.
    Pour ceux qui connaissent le Java, on peut faire quelque chose du genre :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    public class A < B extends C > { ... };
    Cela autorise uniquement l'instanciation d'objets de type : avec D un type qui h�rite n�cessairement de C.

    Je voudrais obtenir le m�me comportement de borne sup�rieure en C++.
    Quelqu'un aurait-il une id�e ? Une piste semble �tre l'utilisation de std::enable_if (valable avec C++11) ...

    Je vous remercie d'avance,

  2. #2
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 503
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 503
    Par d�faut
    "borne sup�rieure"
    WTF, depuis quand y-t-il une notion d'ordre dans les types dans un langage.

    Quel rapport avec le C++/CLI ?

    Avant de vous compliquer la vie, la fonctionnalit� de "duck typing" des templates C++ ne vous suffit pas ?

    En C++/CLI, il existe des generics en plus des templates.
    Ces generics acceptent des contraintes de ce type mais il faut que les classes soient manag�es.

  3. #3
    Membre habitu�
    Homme Profil pro
    �tudiant
    Inscrit en
    F�vrier 2014
    Messages
    11
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2014
    Messages : 11
    Par d�faut
    Je me suis effectivement tromp� de forum, d�sol� (si le message peut �tre d�plac� ...).

    Si on d�finit la loi de composition interne "h�rite de", la notion d'ordre est tout � fait acceptable ... Mais c'est simplement une expression de toute mani�re.

    Ben justement, le duck typing autorise l'utilisation de types totalement diff�rents � partir du moment o� ils ont certaines m�thodes en commun. Les deux types ne sont donc pas forc�s d'h�riter l'un de l'autre.

    Moi je souhaiterais que ce soit le cas. Par exemple, on pourrait vouloir cr�er un type de liste sp�cialement destin�e � la gestion de v�hicules. Il serait donc souhaitable ne n'autoriser que des MaListe<voiture> ou MaListe<moto> et pas des MaListe<chaise>. C'est une sorte de s�curit� qui est souvent utilis�e en Java, et je me demandais juste si on peut faire la m�me chose en C++.

  4. #4
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 503
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 503
    Par d�faut
    Ce que vous dites n'est pas d�nu� de sens, cela a �t� fait en JAVA, dans les g�n�riques .NET, dans des versions draft de C++11, et encore en discussion pour la C++14 (C++1y).

    Mais, actuellement, en C++11, il n'y a pas de support "direct" de cette fonctionnalit� car le "duck typing" est bien plus flexible, mais aussi bien plus naturel dans la conception de templare C++, qui donne un mod�le de code et non un code.
    Il faut comprendre que le caract�re "variable" d'un template est le type, contrairement � la surcharge ou au dispatch dynamique, o� c'est le code et non le type qui est variable.

    Votre exemple montre bien toute la puissance du "duck typing" et des template C++, car votre "MaListe" peut faire ce que vous voulez, et bien plus :
    >on pourrait vouloir cr�er un type de liste sp�cialement destin�e � la gestion de v�hicules
    Il suffit d'utiliser une MaListe<v�hicule>, c'est fait avec 0 code suppl�mentaire.

    Si MaListe<v�hicule> doit avoir une impl�mentation sp�ciale, il suffit d'impl�menter une sp�cialisation de MaListe pour les v�hicules.
    En plus, en cadeau Bonux, l'impl�mentation de cette sp�cialisation est compl�tement transparente pour le code client du template.

    >Il serait donc souhaitable ne n'autoriser que des MaListe<voiture> ou MaListe<moto> et pas des MaListe<chaise>
    Bin non, vous d�clarez une MaListe<v�hicule>.
    Et si une application d'�b�nisterie vient � voir le jour, MaListe<chaise> sera op�rationnelle.
    Mais effectivement, si Maliste doit pouvoir tourner la cl� de contact de ces �l�ments, il faut que cela soit une MaListe<chaiseAMoteur>, mais Mr Bean en a d�j� le brevet.

    L'avantage de votre approche est surtout d'expliciter plus clairement les pr�-requis d'une classe.
    En C++11, il existe les types traits pour exprimer ces conditions (http://en.cppreference.com/w/cpp/types), mais de mani�re assez alambiqu�e � base sp�cialisations, de enable_if http://en.cppreference.com/w/cpp/types/enable_if, de is_base_of http://en.cppreference.com/w/cpp/types/is_base_of, et de version non sp�cialis�e non compilable.

  5. #5
    Membre habitu�
    Homme Profil pro
    �tudiant
    Inscrit en
    F�vrier 2014
    Messages
    11
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2014
    Messages : 11
    Par d�faut
    Bonjour,

    J'ai post� le m�me message sur le forum C++ du coup, vous pouvez aller y pr�senter votre point de vue, il est tout � fait int�ressant !

Discussions similaires

  1. Arbre r�cursif et calcul de borne sup�rieure
    Par zakuza dans le forum Math�matiques
    R�ponses: 2
    Dernier message: 10/04/2015, 20h10
  2. "Borne sup�rieure" pour un template
    Par Rafiki3931 dans le forum C++
    R�ponses: 22
    Dernier message: 20/02/2014, 18h56
  3. Between borne inf�rieure et sup�rieure
    Par AsQuel dans le forum Requ�tes
    R�ponses: 3
    Dernier message: 10/01/2011, 16h52
  4. template match="node() mais pas text()"
    Par Manu_Just dans le forum XSL/XSLT/XPATH
    R�ponses: 4
    Dernier message: 26/03/2003, 10h52
  5. [XSLT] template
    Par demo dans le forum XSL/XSLT/XPATH
    R�ponses: 4
    Dernier message: 09/09/2002, 11h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo