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 :

déclarer le type du membre d'une classe template comme expression des type templates


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Seabirds
    Homme Profil pro
    Post-doctoral fellow
    Inscrit en
    Avril 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Post-doctoral fellow
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2015
    Messages : 294
    Par défaut déclarer le type du membre d'une classe template comme expression des type templates
    Hola tod@s !

    Mon problème est tout simple et a certainement été posée mille fois, mais je n'arrive pas à faire cracher la réponse par nos moteur de recherche préférés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    template<typename T, typename U>
    class A
    {
    public:
      A(T const& t, U const& u) : member(expression(t,u)) {}
     
    private:
      auto expression(T const& t, U const& u) const { return 2*u +t;} 
      ??? member // comment dire à notre ami le compilateur qu'il a a priori tout pour deviner le type du membre ?
    }
    Je me doute qu'il faut utiliser quelque chose comme constexpr, result_of ou decltype (ou pas ) et j'ai bidouillé ce que j'ai pu mais je n'arrive pas à m'en sortir, pourriez-vous m'aiguiller ?

    Merci d'avance !

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Un peu lourd, mais ceci devrait fonctionner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    decltype( 2 * std::declval<U>() +  std::declval<T>() ) member;

  3. #3
    Membre éclairé Avatar de Seabirds
    Homme Profil pro
    Post-doctoral fellow
    Inscrit en
    Avril 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Post-doctoral fellow
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2015
    Messages : 294
    Par défaut
    Super merci j'essaie ça ! Quelle est la différence avec ce que j'avais essayé ci dessous ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::result_of<decltype(&A::expression)(A, T, U)>::type member;

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 760
    Par défaut
    Il faut mettre typename pour les dépendances de type sur des valeurs templates: typename std::result_of<decltype(&A::expression)(A, T, U)>::type member;.
    C'est même l'une des seules erreurs où le compilateur dit quoi faire. "need ‘typename’ before blah blah" pour gcc, "error: missing 'typename' prior to dependent type name blah blah" pour clang.

    Il y a aussi les suffixes _t en C++14 pour ne pas se taper typename et ::type: std::result_of_t<decltype(&A::expression)(A, T, U)> member;

  5. #5
    Membre éclairé Avatar de Seabirds
    Homme Profil pro
    Post-doctoral fellow
    Inscrit en
    Avril 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Post-doctoral fellow
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2015
    Messages : 294
    Par défaut
    Super, merci beaucoup à tous pour vos interventions !
    Je marque le sujet comme étant résolu !

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

Discussions similaires

  1. Objet vector<Type> membre d'une classe
    Par Chewbi dans le forum SL & STL
    Réponses: 3
    Dernier message: 16/02/2006, 17h12
  2. Pointeur sur des fonctions membres d'une classe
    Par Muetdhiver dans le forum C++
    Réponses: 3
    Dernier message: 15/02/2006, 11h35
  3. Réponses: 2
    Dernier message: 06/12/2005, 09h41
  4. [VB.NET]Reflexion lister les membres d'une classe ...presque
    Par lucie.houel dans le forum ASP.NET
    Réponses: 19
    Dernier message: 20/09/2005, 13h49
  5. Thread avec une fonction membre d'une classe
    Par SteelBox dans le forum Windows
    Réponses: 6
    Dernier message: 01/03/2004, 01h15

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