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++ Discussion :

Créer un header pour une instance template particulière.


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut Créer un header pour une instance template particulière.
    Bonjour.

    J'aimerais fabriquer une dll qui utilise nottement quelques classes templates... mais je n'ai besoins que de quelques instances connues à l'avance.


    Ma question est donc: est-il possible de fabriquer à partir d'une classe template A comme celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    template <typename T>
    class A
    {
      T member;
      public:
      A(const T &)
    };
    Un header (et une dll associée) comme celui-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    class As
    {
      std::string member;
      public:
      A(const std::string &)
    };
    class Ai
    {
      int member;
      public:
      A(const int &)
    };
    class AB
    {
      B member;
      public:
      A(const B &)
    };
    sans tout avoir à Réécrire si possible ?


    Merci d'avance

  2. #2
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Pas sur d'avoir compris ta question mais penche toi sur les typedef. (Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef A<std::string> As;
    )
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  3. #3
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    Citation Envoyé par Davidbrcz Voir le message
    Pas sur d'avoir compris ta question mais penche toi sur les typedef. (Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef A<std::string> As;
    )
    En fait, ça ne suffisait pas, par-ce que le wrapper que j'avais trouvé exigeait d'avoir la déclaration complète d'une classe pour en fabriquer un proxy dans le langage demandé.

    Mais maintenant, j'ai trouvé SWIG qui le fait tout seul comme un grand


    Du coups, j'ai rien à faire et le sujet est résolu

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Sinon, étant donné que tu parles de dll, je me dis que ton souhait est peut être d'exporter les spécialisations...

    Dans ce cas, le CRTP ne t'aiderait-il pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    template <class T>
    class CRTP
    {
        /*...*/
    };
    #ifdef BUILD_DLL
        #define MYDLLAPI __declspec(dllexport)
    #else
        #define MYDLLAPI __declspec(dllimport)
    #endif
    class MYDLLAPI Derivee1 : public CRTP<Derivee1>
    {
        /* "yaka" déclarer le constructeur et placer l'appel à celui de 
         * CRTP<derivee> dans la liste d'initialisation :D (si pas de constructeur
         * sans argument)
         */
        /*...*/
    };
    class MYDLLAPI Derivee2 : public CRTP<Derivee2>
    {
        /* idem */
        /*...*/
    };
    Le seul typedef risque, en effet, de ne pas provoquer l'exportation de la classe... Si c'est une classe qui ne doit pas être exportée, cela ne posera aucun problème, mais, autrement ...
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Salut,

    Sinon, étant donné que tu parles de dll, je me dis que ton souhait est peut être d'exporter les spécialisations...

    Dans ce cas, le CRTP ne t'aiderait-il pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    template <class T>
    class CRTP
    {
        /*...*/
    };
    #ifdef BUILD_DLL
        #define MYDLLAPI __declspec(dllexport)
    #else
        #define MYDLLAPI __declspec(dllimport)
    #endif
    class MYDLLAPI Derivee1 : public CRTP<Derivee1>
    {
        /* "yaka" déclarer le constructeur et placer l'appel à celui de 
         * CRTP<derivee> dans la liste d'initialisation :D (si pas de constructeur
         * sans argument)
         */
        /*...*/
    };
    class MYDLLAPI Derivee2 : public CRTP<Derivee2>
    {
        /* idem */
        /*...*/
    };
    Le seul typedef risque, en effet, de ne pas provoquer l'exportation de la classe... Si c'est une classe qui ne doit pas être exportée, cela ne posera aucun problème, mais, autrement ...
    heu oui, c'était plus quelque-chose comme ça que je voyais . En suite, je n'étais pas sûr que même pour ça, le précédent logiciel soit assez puissant pour aller explorer les membres de la classe template en faire la classe proxy correspondante. (je n'exporte pas de C++ vers C++, mais vers C# ) .

    Mais bon, swig fait tout

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Définition de méthodes pour une classe template
    Par Pragmateek dans le forum Langage
    Réponses: 13
    Dernier message: 20/12/2008, 00h46
  2. Créer pause/lecture pour une vidéo en flash
    Par Justin_C dans le forum Flash
    Réponses: 4
    Dernier message: 23/11/2006, 09h46
  3. [Smarty] Problème de header pour une redirection de page
    Par soda_o_rat dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 16/08/2006, 09h58
  4. Réponses: 1
    Dernier message: 20/06/2006, 15h11
  5. Créer un index pour une Base de données
    Par john7 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 31/01/2005, 21h43

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