for_each mit Methoden-Zeiger



  • Hi 🙂

    ist es moeglich, for_each mit einem Zeiger auf eine Klassenmethode aufzurufen, in etwa so:

    class foo
    {
      public:
        void bar(int);
        void doBar();
      private:
        list<int> list_;
    };
    
    void foo::doBar()
    {
        for_each(list_.begin(), list_.end(), this::bar);
    }
    

    der Code in foo::doBar() funktioniert natuerlich nicht, ist nur ein Beispiel um zu verdeutlichen was ich moecht... Gibts so etwas in der Art oder muss ich mir auf jeden Fall einen Funktor bauen? 😕



  • probiers mit std::mem_func oder so ähnlich



  • Hallo,

    kurz:
    for_each(list_.begin(), list_.end(),
    bind1st(mem_fun(&foo::bar), this));
    dazu noch <functional> laden.

    länger: Das Problem ist, dass du einen Methodenzeiger mit gebundenem 'this' übergeben möchtest, was jedoch in C++ nicht geht. Deshalb muss man aus der Methode eine Funktion machen (besser Funktionsobjekt). mem_fun arbeitet mit Methoden die aus 0 oder 1 Parameter bestehen-> mem_fun(&foo::bar)
    Diese 'Funktion' braucht nun 2 Parameter, einen Klassenzeiger(this) und ein int-Wert. Nun soll der erste Parameter an this gebunden werden: bind1st(this, ...).

    Grüße
    Fux


Anmelden zum Antworten