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 :

Comment décomposer les paramètres d'un pointeur de fonction.


Sujet :

C++

  1. #1
    Candidat au Club
    Femme Profil pro
    Ingénieur intégration
    Inscrit en
    Novembre 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Equateur

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2012
    Messages : 1
    Points : 4
    Points
    4
    Par défaut Comment décomposer les paramètres d'un pointeur de fonction.
    Bonjour.
    Je code une classe qui me permet de gérer les DLL et j'ai fait une méthode qui me permet de récupérer une fonction grâce à son nom, (encapsulation de GetProcAddress quoi ) et j'aimerais la transformer en une fonction template qui me ferait un objet avec l'opérateur (), donc un objet style std::function (je peux pas l'utiliser, c'est un exo) et j'aimerais donc passer par exemple : chargerFonc<int (*)(int, int)> comme template et qu'il me génère une un objet avec l'opérateur () style : int operator()( int, int ); mais je n'arrive pas à décomposer les paramètres du pointeur de fonction...
    Quelqu'un pourrait m'aider svp?

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 345
    Points : 1 211
    Points
    1 211
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    template <typename> class function;
     
    template <typename R, typename A, typename B>
      class function<R(*)(A, B)> {
          R (*_f)(A, B);
        public:
          function(R(*f)(A, B)):_f(f) {}
          // ...
          R operator() (A a, B b) {
            return _f(a, b);
          }
      };
    En C++11 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    template <typename> class function;
     
    template <typename R, typename... Args>
      class function<R(*)(Args...)> {
          R (*_f)(Args...);
        public:
          function(R(*f)(Args...)):_f(f) {}
          // ...
          R operator() (Args... args) {
            return _f(args...);
          }
      };
    J'ai omis volontairement les std::forward et autres typedefs pour ne pas "complexifier" le code (et je n'ai pas pu tester cette dernière ébauche de code) mais l'idée est là. Si par "décomposer les paramètres du pointeur sur fonction" tu veux dire "récupérer les types des paramètres de la fonction pointée".
    On remarquera qu'en C++11, std::function exploite decltype et auto afin de traiter de manière simple tous les cas de fonctions ou d'objets fonctions (objets qui implémentent operator()), mais ce n'est pas le sujet.

Discussions similaires

  1. Properties : comment spécifier les paramètres d'une property ?
    Par guilhemr dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 21/04/2008, 13h57
  2. Balise Object, applet Java - Comment cacher les paramêtres ?
    Par Bighobbit dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 18/04/2007, 16h08
  3. Réponses: 2
    Dernier message: 20/10/2006, 08h23
  4. [Excel]Comment détecter les paramètres régionaux
    Par Mut dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/09/2006, 11h01
  5. Réponses: 11
    Dernier message: 06/09/2006, 12h48

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