boost::bind function wrappen



  • Hallo,

    der Titel ist leider Mist, kann es aber schwer beschreiben.

    Ich habe folgende Funktion (fest) gegeben:

    template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
    template <class F>
    Wt::Signals::connection Signal<A1, A2, A3, A4, A5, A6>::connect(const F& function)
    {
      if (!impl_)
        impl_ = new BoostSignalType;
      return impl_->connect(function, Wt::Signals::at_front);
    }
    

    Connected wird das so (function f(int) aus C; Signal<int>):

    onClick().connect(boost::bind(&C::f, this, ::_1));
    

    Jetzt möchte ich aber statt f eine globale Funktion g binden, die f aufruft, also sowas:

    void g(/*f als Parameter*/)
    {
      cout << "Jau";
      // f aufrufen
    }
    // bind irgendwie so:
    onClick().connect(boost::bind(&g, &C::f, this, ::_1));
    

    Mein Problem ist, das ich mich weder mit boost::bind noch signals genug auskennen und ich nicht verstehe, wie und wo ich den int-Parameter her bekomme, um f aufzurufen.

    Wenn zufällig jemand schon ein ähnliches Problem hatte und mit meiner dürftigen Beschreibung klar kommt, wäre super.

    Gruß



  • Den reichst du doch an g() durch, nicht?

    void g(void (C::*f)(int), C* self, int i)
    {
        cout << "Jau";
        (self->*f)(i);
    }
    


  • Mmh, ja, ich bin blöd.
    g ist eine template-funktion und ich hab die gewohnt bescheidenen template-Fehlermeldungen falsch interpretiert.

    Dank dir.


Anmelden zum Antworten