std::logical_and?



  • abend,
    mit

    std::find_if(begin, end, std::mem_fun(&Foo::MemFun1)))
    

    finde ich in einem vector ein Element, dessen Member-Funktion MemFun1 true zurueckgibt.
    Nun gibt es aber noch eine zweite Member-Funktion MemFun2. Ich moechte das erste Element finden, welches sowohl fuer MemFun1 als auch MemFun2 true zurueckliefert.

    Kann ich find_if nutzen und irgendetwas mit logical_and basteln oder muss ich das ganze "manuell ausschreiben"? logical_and ist ja ein Binaerer Funktor, von daher bekomme ich es mit meiner trivialen Herangehensweise nicht hin. Ich stehe aber auch nicht so in dem ganzen algorithm zeug drin.

    Vielen Dank fuer eure Hilfe.



  • Spendier Foo doch einfach eine weitere Memberfunktion (oder meinetwegen auch freie funktion) die MemFun1 && MemFun2 zurück gibt.



  • algorithmloser schrieb:

    std::find_if(begin, end, std::mem_fun(&Foo::MemFun1)))
    

    finde ich in einem vector ein Element, dessen Member-Funktion MemFun1 true zurueckgibt. Nun gibt es aber noch eine zweite Member-Funktion MemFun2. Ich moechte das erste Element finden, welches sowohl fuer MemFun1 als auch MemFun2 true zurueckliefert.

    Kann ich find_if nutzen und irgendetwas mit logical_and basteln oder muss ich das ganze "manuell ausschreiben"? logical_and ist ja ein Binaerer Funktor, von daher bekomme ich es mit meiner trivialen Herangehensweise nicht hin. Ich stehe aber auch nicht so in dem ganzen algorithm zeug drin.

    Neee, geht nicht. Du musst ja irgendwie das Ergebnis des mem_fun-Funktors auf logical_and anwenden. Das geht nicht ohne weiteres. Boost.Bind hilft Dir aber dabei und besitzt sogar Abkürzungen für all die Operatoren.

    find_if(begin,end,bind(&Foo::MemFun1,_1) && bind(&Foo::MemFun2,_1))
    

    Gruß,
    SP



  • Das ist nicht schlecht, danke fuer die Info.


Log in to reply