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 :

class template et constructeur


Sujet :

C++/CLI

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    157
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 157
    Par d�faut class template et constructeur
    Bonjour, je suis en train d'essayer d'apprendre � utiliser les classes template sous VS2010.

    J'ai le code suivant:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    template <typename T>
    class MCODE_Data : public MCODE_Module
    {
    public:
    	MCODE_Data(MCODE_LogManager *_Log);
    	virtual ~MCODE_Data();
     
    protected:
    	T *DataPtr;
    }
    L'impl�mentation est:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    template <typename T>
    MCODE_Data<T>::MCODE_Data(MCODE_LogManager *_Log)
    {
    	// CONSTRUCTOR
    	this->Log = _Log;
    }
    Tout se compile bien pour ce projet (qui cr��e une librairie statique).

    Dans un projet de test, j'utilise:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    MCODE_Data<INT32> *MyData = new MCODE_Data<INT32>(Log);
    qui me g�n�re l'erreur suivante:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1>Dev_MultiCODEView.obj : error LNK2001: symbole externe non résolu "public: __thiscall MCODE_Data<int>::MCODE_Data<int>(class MCODE_LogManager *)" (??0?$MCODE_Data@H@@QAE@PAVMCODE_LogManager@@@Z)
    Si je n'utilise pas le template, tout est OK. Donc j'imagine que c'est un probl�me de syntaxe ou bien je n'ai rien compris.

    Merci d'avance pour votre aide.

    G13.

  2. #2
    Membre �m�rite
    Homme Profil pro
    R&D imagerie 3D / prog embarqu�e
    Inscrit en
    Mars 2007
    Messages
    419
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activit� : R&D imagerie 3D / prog embarqu�e
    Secteur : Sant�

    Informations forums :
    Inscription : Mars 2007
    Messages : 419
    Par d�faut
    Salut,

    J'ai attendu un moment avant de r�pondre pour voir si quelqu'un d'autre avait mieux que moi, car je ne connais pas ce probl�me � fond.
    Par contre, je l'ai d�j� rencontr� et je l'ai contourn� en impl�mentant les parties g�n�riques de ma classe directement dans le header.

    Honn�tement, je ne pense pas qu'il y ait d'autre solution. Je n'en suis pas sur � 100%, mais �a parait logique.
    Les templates sont de l'h�ritage statique. Le type "h�rit�" est donc r�solut � la compilation et non � l'ex�cution. Il faut donc que le compilateur compile une sp�cialisation de ta classe lorsqu'il en rencontre une.
    Disons que tu as une classe A<T> d�finit dans la lib a et que tu instancies un A<int> dans la lib b (ou exe, ou autre). Le compilateur devra compiler le type A<int> lors de la compil de b et non de a (jusque l�, j'en suis sur).
    Hors, lors de la compil de b, je ne vois pas comment il aurait acc�s aux impl�mentations pr�sentes dans les .cpp de la lib a. En impl�mentant tout ce qui touche au type T dans a.h, tu donnes l'acc�s � l'impl�mentation de ton template lors de la compil de b. �a c'est mon intuition, mais en tout cas �a marche

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    157
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 157
    Par d�faut
    Salut Djuju, merci bien pour la r�ponse, effectivement �a marche!

    C'est vrai que ton explication est tout � fait logique. J'aimerais quand m�me avoir la confirmation d'un gourou du C++ pour savoir s'il n'y a vraiment aucune autre alternative... parce que bonjour la lourdeur des fichiers header...

    Gorgo T.

  4. #4
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 510
    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 510
    Par d�faut
    L'explication de djuju est tout � fait juste.
    C'est m�me l'une des principales diff�rences entre les template du C++ et des g�n�riques du C++/CLI.

    Pour ne pas avoir l'impl�mentation des m�thodes templates dans le .h (mais faut �viter les classes tamplates "longue" ), on utilise souvent des fichiers .inl.
    Mais c'est purement cosm�tique car c'est juste ajouter un #include sur le .inl � la fin du .h.

    Beaucoup de librairies sont "template", avec un code dans le .lib extr�mement succinct. Car la quasi totalit� du boulot est fait lors de la compilation du projet utilisant ces librairies, dans l'instanciation des classes templates demand� par le code client.

    Il faut donc "instancier" le template avec les types n�cessaires dans le code de la librairie si vous ne voulez pas "publier" le code de celui-ci.

    J'ai trouvez un trick sympa sur comment publier un template mais pas trop.
    https://anteru.net/2008/11/19/318/

Discussions similaires

  1. Templates et constructeurs de classe h�rit�es
    Par Matthieu Brucher dans le forum Langage
    R�ponses: 14
    Dernier message: 28/06/2014, 00h00
  2. Prototype du constructeur d'une classe template
    Par Meseira dans le forum Langage
    R�ponses: 11
    Dernier message: 05/01/2011, 08h47
  3. constructeur template dans une classe template
    Par regis.portalez dans le forum Langage
    R�ponses: 16
    Dernier message: 13/12/2010, 16h50
  4. classe template pb constructeur
    Par ouinih dans le forum Langage
    R�ponses: 6
    Dernier message: 16/08/2007, 18h02
  5. R�ponses: 6
    Dernier message: 06/10/2004, 12h59

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