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

Langage C++ Discussion :

template et operator +


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Fry
    Fry est déconnecté
    Membre confirmé Avatar de Fry
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 150
    Par défaut template et operator +
    Bonjour

    Est ce qu'il est possible d'utiliser les templates dans l'operateur pour assurer que l'objet passe est bien construit avec le type voulu et pour permettre de surcharge la fonction?

    Par example:
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    class duree // classe englobant l heure les minute et les seconde
    {
    public:
    	duree(){ val = 2; }
    	int val;
    };
     
    class date // classe englobant les anne, les mois, les jour, les heure, les minutes, les seconeds 
    {
    public:
    	date(){ val = 3; }
    	int val;
    };
     
    template <class T>
    class _clock
    {
    public:
    	T temps;
    	void print()
    	{
    		std::cout << temps.val << std::endl;
    	}
     
    	template <class T>	friend _clock  operator + (const _clock<date> &c1, const _clock<duree> &c2)
    	{
    		_clock ret;
    		return ret;
    	}
    	friend _clock<date> operator - (const _clock<date> &c1, const _clock<duree> &c2)
    	{
    		_clock ret;
    		return ret;
    	}
    };
    ne compile pas...
    Le but est de pouvoir faire comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    _clock<date> d1;
    _clock<date> d2;
    _clock<duree> d3;
     
    std::cout << "Temps entre les 2 dates: " << d1 - d2 << std::endl;
    std::cout << "Temp  enleve a d1: " << d1 - d3 << std::endl;
    Je ne sais pas si c'est une bonne idee de faire une difference entre la date et la duree

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    C'est quoi l'erreur ?

  3. #3
    Fry
    Fry est déconnecté
    Membre confirmé Avatar de Fry
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 150
    Par défaut
    L'erreur se situe au niveau de la syntaxe avec les template je sais pas comment ecrire la surcharge des operateur pour que ca marche.

    j ai modifier la syntaxe comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    template <date>	friend _clock  operator + (const _clock<date> &c1, const _clock<duree> &c2)
    {
    	_clock ret;
    	return ret;
    }
    mais j obtien mnt cette erreur sur la ligne de declaration de la fct:

    error C2993: 'date' : illegal type for non-type template parameter '__formal'

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    C'est quoi le friend qui se balade ?

  5. #5
    Membre expérimenté Avatar de Twindruff
    Inscrit en
    Janvier 2005
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 216
    Par défaut
    Si tu déclares ton operateur avec 2 arguments il doit être à l'extérieur de la classe. Si tu veux le déclarer à l'intérieur il n'y a qu'un argument et
    a+b <=> a.operator+(b)

  6. #6
    Fry
    Fry est déconnecté
    Membre confirmé Avatar de Fry
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 150
    Par défaut
    Le friend sert justement a declarer l'operateur a l interieur de la classe effectivement il vaut mieu ecrire declarer l'operateur comme ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    template <date> _clock  operator + ( const _clock<duree> &c2)
    {
     
    }
    mais j ai tjr la meme erreur: error C2993: 'date' : illegal type for non-type template parameter '__formal'

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

Discussions similaires

  1. template et operator[] ?
    Par rv2931 dans le forum Langage
    Réponses: 5
    Dernier message: 30/11/2012, 16h35
  2. operator() avec les templates
    Par kranagard dans le forum Langage
    Réponses: 6
    Dernier message: 09/02/2011, 15h45
  3. template et operator <<
    Par isoman dans le forum Langage
    Réponses: 5
    Dernier message: 11/03/2008, 20h47
  4. [Débutant]Foncteur et operator() template
    Par Sub dans le forum Langage
    Réponses: 14
    Dernier message: 27/03/2007, 13h51
  5. Templates et Operator()
    Par Alp dans le forum C++
    Réponses: 7
    Dernier message: 14/01/2006, 13h41

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