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 :

ellipsis function wrapper


Sujet :

Langage C++

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 33
    Par défaut ellipsis function wrapper
    plop,
    j'essaye de faire une simple fonction pour éviter d'avoir a repasser 40 arguments quand je veux allouer un objet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    template <class U>
    shared_ptr<U> CreateRes(...)
    {
    	return shared_ptr<U>(new U(this->GetDevice(), this->GetDeviceContext(), __VA_ARGS__));
    }
    mais veut pas compiler, ca me sort "error C2059: syntax error : ')'" sur le return

  2. #2
    Membre émérite
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Par défaut
    __VA_ARGS__ ne fonctionne que pour les macros.
    Et "this->" est, en général, inutile.
    Enfin, il faut utiliser make_shared autant que possible.

    Donc ce code deviendrait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define CreateRes(...) std::make_shared<U>(GetDevice(), GetDeviceContext(), __VA_ARGS__)

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 33
    Par défaut
    merci pour la réponse,
    mais comme tu vois c'est une fonction membre.
    La macro devrait etre déclarée dans le fichier ou elle est utilisée, et en utilisant le nom complet des arguments style game.mainwnd->GetDevice(), donc pas réutilisable et doit etre fait par l'utilisateur de la lib, c'est pas le but recherché.

  4. #4
    Membre émérite
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Par défaut
    Citation Envoyé par biyoudidou Voir le message
    merci pour la réponse,
    mais comme tu vois c'est une fonction membre.
    La macro devrait etre déclarée dans le fichier ou elle est utilisée, et en utilisant le nom complet des arguments style game.mainwnd->GetDevice(), donc pas réutilisable et doit etre fait par l'utilisateur de la lib, c'est pas le but recherché.
    En tout cas, __VA_ARGS__ n'aura d'utilité qu'avec une macro.

    Si tu n'utilises pas le c++11, tu peux te rabattre sur quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define CreateRes(name, ...) std::make_shared<U>((name).GetDevice(), (name).GetDeviceContext(), __VA_ARGS__)
    Si tu utilises c++11 (ce que tu devrais faire dans tous les cas), voici ce que tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    template <typename U, typename... Args>
    shared_ptr<U> CreateRes(Args &&... args) {
       return make_shared<U>(GetDevice(), GetDeviceContext(), std::forward<Args>(args)...);
    }

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 33
    Par défaut
    okay, merci, ca répond a ma question.

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

Discussions similaires

  1. implicit declaration of function
    Par guillaume_pfr dans le forum C
    Réponses: 7
    Dernier message: 12/06/2003, 10h59
  2. [POSTGRESQL] exec function
    Par peuh dans le forum Requêtes
    Réponses: 5
    Dernier message: 23/05/2003, 15h15
  3. A propos des 'File management Functions' de Windows
    Par znaidi dans le forum Windows
    Réponses: 3
    Dernier message: 01/04/2003, 16h01
  4. [postgreSQL] équivalent de la function 'instr'
    Par Dra_Gun dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/01/2003, 16h09
  5. [Dev c++ 4] implicite declaration of function "int kbhi
    Par Torpedox dans le forum Dev-C++
    Réponses: 5
    Dernier message: 01/01/2003, 13h37

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