Comment vérifier si std::function est vide en C++11?

Je me demandais comment bien vérifier si une std::function est vide. Considérons cet exemple:

class Test {
    std::function<void(int a)> eventFunc;

    void registerEvent(std::function<void(int a)> e) {
        eventFunc = e;
    }

    void doSomething() {
        ...
        eventFunc(42);
    }
};

Ce code se compile très bien dans MSVC mais si je l'appelle doSomething() sans l'initialisation de la eventFunc le code évidemment se bloque. C'est prévu, mais je me demandais quelle est la valeur de la eventFunc? Le débogueur dit 'empty'. J'ai donc résolu à l'aide de simples si la déclaration:

   void doSomething() {
        ...
        if (eventFunc) {
            eventFunc(42);
        }
   }

Cela fonctionne, mais je me demande encore quelle est la valeur de la non-initialisé std::function? Je voudrais écrire if (eventFunc != nullptr) mais std::function est (évidemment) pas un pointeur.

Pourquoi la pure si les œuvres? Quelle est la magie derrière tout cela? Et, est-ce la bonne façon de le vérifier?

  • Notez que eventFunc n'est pas un lambda, c'est un std::function. Vous pouvez stocker des lambdas dans std::functions, mais ils ne sont pas la même chose.
  • Vous avez raison, j'ai changé le titre pour éviter toute confusion. Merci.
InformationsquelleAutor NightElfik | 2014-02-16