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 :

fonction bindée ou non ?


Sujet :

Langage C++

  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 274
    Par défaut fonction bindée ou non ?
    Bonjour à tous ,

    J'ai peut être loupé quelque chose dans la doc de boost car je dois avouer que j'ai du mal à tout comprendre dedans mais je voulais simplement savoir si il était possible (justement) de savoir si une boost::function était bindée ou non à un moment quelconque lors de l'exécution.

    En effet, il est assez problématique d'appeler f(...) avec f une boost::function<...> si celle-ci n'a pas été bindée auparavant (ce qui m'est arrivé bêtement , entraînant comme toujours un certain temps pour trouver le problème).

    Est-ce possible ? Ou bien c'est à l'utilisateur de faire attention et de faire en sorte que la fonction soit toujours bien bindée avant d'être appelée ?

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Par défaut
    std::is_bind_expression

    il est assez problématique d'appeler f(...) avec f une boost::function<...> si celle-ci n'a pas été bindée auparavant
    Pourquoi donc ?

  3. #3
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par défaut
    Bonjour,

    std::function propose un opérateur de conversion vers bool donc il est possible de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(f == true)
    {
       // si la cible contenue par f est valide
    }
    Une autre solution est de catcher l'exception bad_function_call qui est lancée si f est appelé alors qu’elle contient une cible invalide.

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    En lisant les réponses, j'ai l'impression que ta question n'est pas très clair. Tu veux :
    • Vérifier que ton foncteur est issue d'un std::bind ?
    • Vérifier que ton foncteur a une cible valide ?
    • Vérifier que ton foncteur est "callable" avec les arguments que tu vas lui donner ?


    Quel est le contexte de ta vérification ? Quand et pourquoi veux tu faire une vérificaton ?

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 274
    Par défaut
    Merci pour vos réponses !

    @cob59:
    Pourquoi donc ?
    Essaie donc cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    boost::function<int(int)> f;
    int a=f(5); //5 ou n'importe quoi d'autre
    Ici f n'est pas bindée et ça plante.

    Edit : en relisant ton post, je l'ai compris d'une autre façon et c'est vrai qu'on est pas obligé de binder la fonction pour que ça marche, ça dépend des cas

    @Arzar:
    Merci, c'est ce que je cherchais

    @Flob90:
    Mon problème de base était très simple : juste vérifier que le foncteur a une cible valide

    Dans le contexte c'est pour, dans une classe de transformation d'image, pouvoir appeler la fonction si elle a une cible valide, et ne pas l'appeler sinon, car dans ce cas le programme se crashe immanquablement ! (je ne l'ai pas très bien formulé mais là n'est pas le problème )

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    Dans ce cas Arzar t'a donné la réponse.

    Dans ce contexte, je ferais la vérification dans une assertion pour pouvoir debuger et je laisserais planter en realease. Si l'utilisateur de ta classe servant à faire des tranformée n'indique pas comment effectuer la tranformation, alors c'est de sa faute.

  7. #7
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 274
    Par défaut
    Vraiment ?
    J'ai du mal à comprendre pourquoi permettre à un utilisateur de se planter alors qu'il est possible de faire en sorte qu'il ne se trompe pas

    Edit : sinon sujet résolu

  8. #8
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Ton utilisateur se trompe dans les deux cas, dans un cas, tu lui dis en plantant, dans l’autre cas, tu ne lui dis pas et il ne se rendra peut-être pas compte qu’il s’est trompé et ne comprendra par pourquoi son résultat est faux.

    Personnellement, je suis plutôt adepte de prévenir l’utilisateur.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 18/03/2007, 02h13
  2. Réponses: 3
    Dernier message: 03/01/2007, 21h43
  3. socket : fonction bind
    Par hammag dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 21/11/2006, 20h09
  4. [C++] La fonction bind
    Par cfrelet dans le forum Bibliothèques
    Réponses: 4
    Dernier message: 19/05/2006, 17h18
  5. [SOCKET] Fonction bind()
    Par chacal dans le forum Développement
    Réponses: 13
    Dernier message: 19/12/2005, 14h22

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