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 :

[Metaprogramation]Boucle for template (très) générique


Sujet :

Langage C++

  1. #21
    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 JolyLoic Voir le message
    Le brouillon actuel de la norme dit (et je crois que c'était déjà ça en C++98) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    A non-type template-parameter shall have one of the following (optionally cv-qualified) types:
    — integral or enumeration type,
    — pointer to object or pointer to function,
    — lvalue reference to object
    je vais probablement encore dire une bétise, mais... pourquoi ? y'a t'il une limitation architecturale logique à cette limitation ?

    surtout que j'ai l'impression que les constexpr sont un paliatif a ce manque, mais sans imposer d'optimisation aux compilos....

    Sinon, dans le cas, présent, j'utilise les templates surtout comme des super_préprocesseur... et il y a des fois (comme celui-ci) ou de simples macro évoluées les remplacerait facilement...juste à causes de ces limitations... (bon, il faudrait aussi pouvoir passer un objet non statiques... et c'est un autre probl-me je crois)

  2. #22
    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 : 51
    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
    La complexité ?
    La notion d'égalité qui est essentielle pour savoir si deux types en sont un seul, mais difficile à définir pour certains types (double, par exemple) ?
    Le fait qu'au moment où ça a été introduit, personne n'en voyais l'intérêt ?
    Problèmes liés à la durée de vie des objets si on pouvait directement les déclarer dans un paramètre templace ?
    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.

  3. #23
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par défaut
    Citation Envoyé par méphistopheles Voir le message
    Sinon, dans le cas, présent, j'utilise les templates surtout comme des super_préprocesseur
    c'est se priver de bien des aspects de la chose

  4. #24
    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 JolyLoic Voir le message
    La notion d'égalité qui est essentielle pour savoir si deux types en sont un seul, mais difficile à définir pour certains types (double, par exemple) ?
    du moment que l'opérateur est défini...j'aurais tendance à dire que le reste est à la charge de l'utilisateur.(éventuellement en appelant un is_equal<>de son cru sur les types de base à la place des opérateur de base en cas de besoin).
    Citation Envoyé par JolyLoic Voir le message
    Le fait qu'au moment où ça a été introduit, personne n'en voyais l'intérêt ?
    et maintenant ? c'est toujours aussi inutile ?
    Citation Envoyé par JolyLoic Voir le message
    Problèmes liés à la durée de vie des objets si on pouvait directement les déclarer dans un paramètre templace ?
    c'est clair que là, c'est beaucoup plus complexe :s... mais on pourrait au moins autoriser ça pour les POD non ?

    Citation Envoyé par Joel F Voir le message
    c'est se priver de bien des aspects de la chose
    Je ne parlais que du problème présent (boucles for). Ici, une sorte de #FOR INDEX .... serait plus simple...

  5. #25
    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 : 51
    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
    Citation Envoyé par méphistopheles Voir le message
    du moment que l'opérateur est défini...j'aurais tendance à dire que le reste est à la charge de l'utilisateur.(éventuellement en appelant un is_equal<>de son cru sur les types de base à la place des opérateur de base en cas de besoin).
    Ce n'est pas tant le is_equal, ou alors la recherche d'un is_equal doit avoir lieu avant même de valider la syntaxe du code...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    template <float f> class A {};
     
    void f(A<1> a) {}
    void f(A<0.9+0.1> a) {}
    Ce code serait-il correct ?



    Citation Envoyé par méphistopheles Voir le message
    et maintenant ? c'est toujours aussi inutile ?
    Je pense que oui, les constexpr étant là pour faire pas mal de choses à la compilation avec tous les types.
    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.

  6. #26
    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 JolyLoic Voir le message
    Ce n'est pas tant le is_equal, ou alors la recherche d'un is_equal doit avoir lieu avant même de valider la syntaxe du code...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    template <float f> class A {};
     
    void f(A<1> a) {}
    void f(A<0.9+0.1> a) {}
    Ce code serait-il correct ?
    Pour être sûr il faudrait écrire une fonction round du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    template <double d, unsigned int NDecimal> 
    struct round
    {
      const static double value=( d * puissance< 10, NDecimal > - ( d * puissance< 10, NDecimal > % 1 ) ) / puissance< 10, NDecimal >;
      //pas sûr que le % existe pour les double, mais bon, c'est juste l'idée.
      //puissance<double, int > est facile a faire.
    };
    et là, je ne vois pas ou est le probleme en appelant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void f(A<round<1,2>::value> a) {}
    void f(A<round<0.9+0.1,2> > a) {}
    Le problème reste à la charge de l'utilisateur.


    Citation Envoyé par JolyLoic Voir le message
    Je pense que oui, les constexpr étant là pour faire pas mal de choses à la compilation avec tous les types.
    Mais les optimisations faites avec les constexpr sont-elles définies (je veux dire le comportement :s ) ? j'ai l'impression que l'optimisation est laissée libre au compilateur... ce qui n'est vraiment pas souhaitable pour la portabilité ou autre...

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [XSLT 1.0] Boucle for each ou template méthode
    Par kacedda dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 27/08/2014, 16h17
  2. temps d'exécution très lent pour les boucles for
    Par NELLLY dans le forum MATLAB
    Réponses: 2
    Dernier message: 02/01/2013, 11h00
  3. rendre plus générique une boucle for
    Par beegees dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 31/05/2009, 22h31
  4. [Template] Template et boucle for
    Par Bakura dans le forum Langage
    Réponses: 4
    Dernier message: 27/10/2008, 14h11
  5. [langage] boucle "for" modification du pas
    Par K-ZimiR dans le forum Langage
    Réponses: 4
    Dernier message: 29/04/2004, 11h54

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