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 :

macros/templates et generation de code


Sujet :

C++

  1. #1
    Membre chevronné

    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Par défaut macros/templates et generation de code
    Bonjour!

    J'ai le probleme suivant: J'ai une librarie C++ qui definit un certain nombre fonctions dont certains parametres sont templatise, afin d'accepter des nombres en double ou simple precision,
    exemple:
    template <class T> T toto(T x) { return x+1; }

    La ou ca se complique c'est que ces fonctions doivent etre exportee en C,
    donc je crees deux prototypes
    extern "C"
    {
    double toto_d(double x);
    float toto_s(float x);
    }

    que j'implemente ensuite de la meme facon en appelant toto(x).

    Tout cela c'est bien, mais pas top: il y a beaucoup de fonctions, et chacune doit etre wrappee a double, ce qui me fait un nombre de copies conceptuellement inutiles.

    Raison pour laquelle je me demandais s'il serait possible d'utiliser des MACROS d'une certaine pour me simplifier la tache. (la chose ne me parait pas possible a prioris, mais peut-etre me trompe-je?)

    Salutations,

    Greg

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Fonctions.h
    -----------
     
    TYPE FUNC(toto)(TYPE x);
    TYPE FUNC(titi)(TYPE x);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Main.h
    ------
     
    #define TYPE double
    #define FUNC(x) x##_d
    #include "Fonctions.h"
     
    #undef TYPE
    #undef FUNC
     
    #define TYPE float
    #define FUNC(x) x##_s
    #include "Fonctions.h"
    Fait à l'arrache et pas testé.

  3. #3
    Membre chevronné

    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Par défaut
    Ok Merci ca devrait faire l'affaire!

    Salutations,

    Greg

  4. #4
    Membre chevronné

    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Par défaut
    Hello,


    Un autre probleme dans la meme lignee: ma librairie est aussi appelee depuis l'exterieur avec matlab.

    Je vous passe les details, mais en gros je cree un fichier .cpp qui definit une fonction mexFunction.

    Dans ce wrapper se trouve "marshalling" si on veut bien des donnes matlab en donnees C++, puis l'appel de la fonction C.

    Typiquement les donnes recuperee de matlab on le type "static" void* et on a un parametre (classId) qui nous donne le type "dynamic" des donnees (ie SINGLE, DOUBLE, INT32, etc.)

    A nouveau j'ai une repetition de code pas tres productive pusique je dois faire a chaque fois:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (classId == SINGLE)
        toto_s((float*) data,...);
    else if (classId == DOUBLE)
        toto_d((double*) data,...);
    else
        afficher erreur type incompatible...
    et ce pour chaque fonction.


    Est-il possible a l'aide d'une macro de simplifier l'appel, ideallement je n'aurais plus qu'a faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FUN_CALL(toto, (TYPE*) data);
    Ca serait super!

    Merci,
    Gregoire

Discussions similaires

  1. Recuperation variable et generation de code
    Par newixz dans le forum Delphi
    Réponses: 13
    Dernier message: 27/12/2006, 13h31
  2. Generation de code a partir de SQL
    Par RemiRoques dans le forum Général Java
    Réponses: 10
    Dernier message: 09/06/2006, 16h07
  3. Problème de génération du code java...
    Par nikalkal dans le forum Rational
    Réponses: 1
    Dernier message: 21/04/2006, 14h32
  4. Quel avenir pour les outils de génération de code ?
    Par Bruno75 dans le forum Débats sur le développement - Le Best Of
    Réponses: 5
    Dernier message: 05/11/2003, 18h30
  5. Génération de code
    Par YAMKI dans le forum Rational
    Réponses: 5
    Dernier message: 22/04/2003, 16h41

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