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++/CLI Discussion :

Stocker la signature d'une fonction dans un template!


Sujet :

C++/CLI

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    juillet 2009
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : juillet 2009
    Messages : 218
    Points : 130
    Points
    130
    Par défaut Stocker la signature d'une fonction dans un template!
    Bonjour a tous!

    Je viens vers vous a cette heure parce que je tante en réaliser quelque chose en C++ depuis hier.
    En fait il m'a été donne un projet à réaliser dans lequel je dois commencer par réaliser la notation de la signature d'une fonction à partir d'une structure template.
    Pour tout vous dire voici ce que le sujet demande à ce niveau:

    Vous devez écrire une structure nommée FunctionSignature, qui prend en template une signature de fonction jusqu’à 4 arguments. Le type devra être accessible à travers le typedef type.
    Vous devez vous demander comment faire ?
    1. Déclarez une structure qui prend un template ;
    2. Déclarez la même structure en spécialisant partiellement la précédente.

    La spécialisation aura la forme de la signature de la fonction alors que la partie déclaration de type template déclarera chacun des membres de la signature.
    Exemple d'utilisation:
    FunctionSignature<int (const std::string& str)>::type f = typeof(onefunction);
    J'ai fouille partout sur le net, je n'ai trouve aucune doc ou sujet pouvant m’éclairer. Quelqu'un pense-t-il que c'est vraiment réalisable le truc? Pouvez me donner des idées, ou alors un petit lien utile?

    Je vous prie de m'aider a découvrir ce mystère des templates en C++

    Merci infiniment pour votre aide.

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    juillet 2009
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : juillet 2009
    Messages : 218
    Points : 130
    Points
    130
    Par défaut
    Le sujet a été modifie, c'est bien ceci désormais comme exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FunctionSignature<int (const std::string& str)>::type f = &onefunction;
    où onefunction est unen function prenant un std::string const et renvoyant un int pour l'exemple.

    Mais j'arrive toujours pas a voir comment faire la déclaration et la spécialisation pour gérer la valeur de retour et les paramètres de la fonction dont la signature sera passe en paramètre du template.

    Merci.

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : mars 2011
    Messages : 59
    Points : 120
    Points
    120
    Par défaut
    Salut,

    tu cherches peut être une classe sous la forme

    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
    class no_arg
    {
    };
     
    template<
        typename _ret, 
        typename _arg1 = no_arg, 
        typename _arg2 = no_arg, 
        typename _arg3 = no_arg, 
        typename _arg4 = no_arg>
    class FunctionSignature
    {
    public:
        typedef _ret return_type;
        typedef _arg1 arg1_type;
        typedef _arg2 arg2_type;
        typedef _arg3 arg3_type;
        typedef _arg4 arg4_type;
    };
    avec pour le premier cas :

    FunctionSignature<int, const string &>::return_type == int
    FunctionSignature<int, const string &>::arg1_type == const string &

    tu peux aussi l'exprimer recursivement avec des typelist ( à la façon de boost::tuple/fusion)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    template < typename T, typename U >
    struct typelist {
      typedef T element_type;
      typedef U next_type;
    };

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    juillet 2009
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : juillet 2009
    Messages : 218
    Points : 130
    Points
    130
    Par défaut
    Salut A tous!

    J'ai pu trouve comment faire mes déclarations et spécialisations finalement.

    Merci de m'avoir lu!

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    juillet 2009
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : juillet 2009
    Messages : 218
    Points : 130
    Points
    130
    Par défaut
    Salut Kessoufi!

    J'ai poste sans me rendre compte que tu avais répondu a mon post, puisque ça traînait un peu.

    Si non j'avais déjà essaye toutes tes méthodes, mais ça ne marchait pas pour mon projet de metaprog. J'ai finalement réussi a bien le faire.

    Je déclare d'abord juste la structure sous forme de forwrad déclaration avec un seul paramètre en template ainsi:
    template < typename T>
    struct FunctionSignature
    {};
    et ensuite je fais mes spécialisations en fonction du nombre de paramètres que peut prendre la fonction. C'est ça le trics, du moins celui que j'ai trouve et qui marchent bien.
    Avec ça j'ai pu gérer le reste du projet, j'ai applique le même principe pour garder le type d'une variable ou la signature d'une fonction jusqu’à la compilation.

    Merci pour ton aide

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

Discussions similaires

  1. [XL-2007] Stocker le résultat d'une fonction d' excel dans une variable en vba
    Par zak-mouk dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/06/2015, 14h02
  2. [1.x] appelle d'une fonction dans le template
    Par scarabe088 dans le forum Symfony
    Réponses: 1
    Dernier message: 13/09/2011, 22h56
  3. [Smarty] Utilisation d'une fonction dans un template
    Par HwRZxLc4 dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 15/07/2010, 22h57
  4. Programmation d'une fonction dans Rn
    Par simone.51 dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 12/11/2004, 12h30

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