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 :

Paramètre virgule flottante fonction template


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Autodidacte
    Inscrit en
    Janvier 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Autodidacte

    Informations forums :
    Inscription : Janvier 2008
    Messages : 46
    Par défaut Paramètre virgule flottante fonction template
    Bonjour

    Je commence à apprendre la méta-programmation grâce à un tutoriel de Développez.com et je suis face à un grand questionnement...

    J'ai fait une fonction avec des paramètres template de type int et elle fonctionne parfaitement, mais si je remplace ce type par le type float, double, une structure ou une classe le compilateur me dis que ces types sont interdits comme paramètre.

    Voici le squelette de ma fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    template<double v> struct Fonc
    {
    	static double F() { return v;}
    };
    Apparemment, le compilateur n'accepte que les int, char, bool, références et pointeurs...
    Je peux donc créer mes différentes méta-fonctions avec des référence mais ceci pourrait me causer des désagréments dans certaines situations.

    Je me demande pourquoi le compilateur est si capricieux avec les paramètres template, pourquoi n'accepte-t-il pas tous les types comme pour les paramètres des fonctions?

    J'aimerais avoir vos avis sur la question...

  2. #2
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Quelle notion d'égalité est à utiliser?

    -> Pour les types flottants, ça pose des problèmes d'arrondis, de la nécessité pour le compilateur d'émuler exactement le comportement du processeur, sans parler des modes d'arrondis qui compliquent encore.

    -> Pour les types utilisateurs, on utilise l'opérateur == du type?

    C'est le genre de problèmes qu'on a cherché à éviter en interdisant purement et simplement. Depuis l'émergence des techniques de méta-programmation, le problème des flottants a été resoulevé et il y a eu des propositions de spécification. Mais je ne sais pas si elles ont été formalisées, et encore moins si elles ont aboutis.

  3. #3
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Pour les flottants, je suppose que cette question a du être résolue pour les constexpr (je ne suis pas trop à jour sur ce sujet). Je me demande s'il y a eu une proposition d'étendre ça aux templates.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Autodidacte
    Inscrit en
    Janvier 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Autodidacte

    Informations forums :
    Inscription : Janvier 2008
    Messages : 46
    Par défaut
    Merci pour vos réponses...

    J'ai créé ma fonction avec des référence et je me suis retrouvé devant le même problème, une variable double doit être instanciée car sinon les références et pointeurs sont inutiles.

    Après de nombreux essais et beaucoup de temps, j'ai réussi à régler le problème avec une variable globale et je suis allé continuer le tutoriel sur la méta-programmation...

    Deux paragraphes en dessous de l'endroit où je l'avais laissé je trouve exactement la fonction que je viens de faire, mais en dix fois plus simple et en dix fois plus élégant.

    Je ne suis pas certain de comprendre l'intérêt d'interdire les types plus complexe que les entier, mais au moins je sais comment gérer ça grâce au tutoriel et la prochaine fois je ne me ferai pas prendre.

Discussions similaires

  1. Paramètre par défaut d'une methode/fonction template
    Par valefor dans le forum Langage
    Réponses: 4
    Dernier message: 03/08/2007, 11h22
  2. Virgule flottante et fonction [BCB6]
    Par Draner dans le forum C++Builder
    Réponses: 8
    Dernier message: 22/07/2007, 10h08
  3. Réponses: 6
    Dernier message: 16/05/2004, 19h03
  4. [langage] Arithmétique en virgule flottante
    Par marouanitos dans le forum Langage
    Réponses: 3
    Dernier message: 19/09/2003, 14h48
  5. [Kylix] Kylix3: Pb de virgule flottante
    Par hubble dans le forum EDI
    Réponses: 1
    Dernier message: 22/06/2003, 16h36

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