function adapters -> ein 'other_mem_fun' ?



  • Hallo Leute!

    zB bei for_each kann man mittels mem_fun, mem_fun_ref und ptr_fun ja diverse funktionen und methoden so hinbiegen, dass for_each sie schluckt:
    list<foo> fooList;
    for_each(fooList.begin(), fooList.end(), mem_fun_ref(&foo::bar));

    doch hier muss ich eine methode von foo angeben.
    was wenn ich aber eine methode eines anderen objektes angeben will?

    zB
    fooFriend::foobar()
    ?

    das geht ja nicht.
    gibt es etwas wie

    fooFriend ff;
    other_mem_fun(&ff,&fooFriend::foobar);
    ?

    irgendwie finde ich keine moeglichkeit dies zu realisieren 😞
    und sogar Meyers schweigt sich in Effective STL darueber aus 😞



  • bind1st oder so.



  • dank DieMumies Hilfe sieht der code jetzt so aus:

    #include<iostream>
    #include<sstream>
    #include<vector>
    #include<algorithm>
    #include<functional>
    using namespace std;
    
    class Test
    {
    public:
        void foo(int i) const
        {
            cout<<i;
        }
    };
    
    int main()
    {
    
        vector<int> V;
        V.push_back(1);
        V.push_back(7);
        V.push_back(3);
    
        Test t;
    
        for_each(V.begin(), V.end(), bind1st(mem_fun_ref(&Test::foo),t));
    }
    

    doch irgendwie stoert mich das const bei foo.
    das muss doch wegzubekommen sein, oder?



  • ok, sache ist erledigt:

    einfach mem_fun statt mem_fun_ref verwenden und &t statt t



  • @Shade: Aber das mit mem_fun war doch genau das, was ich vorgeschlagen hatte? (im Chat) 😕

    PS: macht mal den confused smiley wieder ganz


Anmelden zum Antworten