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 :

template, et utilisation dans une class


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair�
    Homme Profil pro
    �tudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 37
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Par d�faut template, et utilisation dans une class
    Bonjour ( re )

    Encore une petite question sur les template :

    Peut-on creer une fonction template dans une class normal ?

    ex :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    class Object
    {
    public :
    ...
      template < typename T > std::unique_ptr < T >    chargeUnObjetUniquePtr ( std::unique_ptr < T > objet ) 
     {
        object -> faitQuelquechose( bidul , &truck ) ;
      return sd::move ( object ) ;
     }
    ...
    }
    ( a condition bien sur que le template soit addapt� � l'objet )

    J'ai essay�, il ca ne colle pas...

  2. #2
    Membre tr�s actif

    Homme Profil pro
    �tudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Par d�faut
    Bonjour,

    oui on peut. Qu'est-ce qui ne va pas ? Quelle erreur obtiens-tu ?

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par d�faut
    Oui on peut et le probl�me n'a rien � voir avec les template, tu commets une erreur : l'argument std::unique_ptr est pass� par copie, or un unique_ptr ne peut pas �tre copi�, seulement d�plac� ou r�f�renc�. Du reste, si tu retourne la valeur pass�e en argument au d�but, pourquoi vouloir la d�placer et la re-d�placer en sortie ? Il faut utiliser une r�f�rence, tout simplement. Autre remarque : il n'y a pas besoin de std::move lorsque tu retournes par valeur, ce sera fait naturellement si l'objet est d�pla�able (m�me si je le rappelle, ici il ne faut ni copier ni d�placer).

    Tu t'attaques directement aux templates sans m�me ma�triser des concepts plus basiques comme les r�f�rences. Je sugg�re que tu commences par avaler un bouquin de C++ avant de beaucoup coder .

  4. #4
    Membre �clair�
    Homme Profil pro
    �tudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 37
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Par d�faut
    Il faut utiliser une r�f�rence, tout simplement.


    mais c'est bien sur ! J'avoue que je me suis un peu pr�cipiter a coder, sans pour autant avoir bien assimil� toutes les notions... ( et je commence enfin a comprendre certaines choses de bases ) .J'ai bien lu un bouquin sur le c++, mais c'est sans doute insuffisant. Je pense n�anmoins que la pratique reste une bonne fa�on de progresser, surtout si on a la chance d'avoir acc�s a des forum comme celui ci ! ( encore un grand merci, d'ailleurs, a toute l'�quipe ) . Bien sur il ne faut pas compter que dessu . C'est d'ailleurs pourquoi j'en arrive a 'bidouiller' des codes, comme celui sur ce poste avec les unique_ptr, par ex... ( ca fonctionne, mais c'est pas orthodoxe ). Donc, merci pour le conseil. Je vais essayer de trouver d'autres livres et de potasser toujours un peu plus .

    J'ai donc all�g� ma fonction gr�ce aux r�f�rences, cependant, le probl�me persiste. Ca donne :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
        std::unique_ptr < OBJECT_Base > model ( new OBJECT_Base ) ;
     
        for ( auto &it : _RESOURCES_Object )
        {
            if ( it -> contiendObject ( name ) )
            {
                it -> loadObject_Base ( *model , name ) ; //ici, ca marche, mais uniquement avec mon Object_base
                it -> loadOBJECT ( *model , name ) ; // c'est pourquoi j'aimerais transmormer la fonction en template, pour élargir
                                                                       // les possibilités avec d'autres objets qui sont 'agrégationné', si j'ose dire (et 
                                                                       // si je dis pas de bêtises ) , de la même facon...
            }
        }
    et voici ma fonction template, dans mon objet RESOURCES_Object ( dirrectement le fichier cpp )

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
     
    template < typename T > void RESOURCES_Object::loadOBJECT (  T  &object , std::string name )
    {
     
    }
    le compilateur me dit :

    " undefined reference to 'void RESOURCES_Object::loadOBJECT< OBJECT_Base>(OBJECT_Base&, std::string)"

  5. #5
    Membre tr�s actif

    Homme Profil pro
    �tudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Par d�faut
    La d�finition de la fonction template doit se situer dans le header pas dans le cpp.

  6. #6
    Membre �clair�
    Homme Profil pro
    �tudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 37
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Par d�faut
    La d�finition de la fonction template doit se situer dans le header pas dans le cpp.
    bien vu ! Merci, maintenant, ca compile.

    J'avais oubli� qu'on ne pouvais pas utiliser des templates dans les cpp...J'ai lu quelquepart que c'�tait logique, et qu'un template dans un cpp n'aurait pas de sens...

    Mais j'avoue que je vois pas trop pourquoi. Et en l�occurrence, ca alourdie beaucoup le code, nan? dans mon cas, c'est une fonction qui fait appel au disque dur pour charger des donn�s, donc je risque de me retrouver avec une class dans le header super longue, c'est normal ?

  7. #7
    Membre tr�s actif

    Homme Profil pro
    �tudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Par d�faut
    la d�finition ce n'est pas le prototype.

    La d�finition de la fonction c'est son impl�mentation, qui, pour une fonction template, doit aussi se trouver dans le header.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 3
    Dernier message: 16/04/2011, 10h32
  2. R�ponses: 1
    Dernier message: 12/04/2009, 17h54
  3. R�ponses: 4
    Dernier message: 25/10/2007, 17h18
  4. template et utilisation avec une classe existante
    Par vartav dans le forum Langage
    R�ponses: 6
    Dernier message: 14/03/2007, 10h39
  5. R�ponses: 4
    Dernier message: 08/11/2005, 15h10

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