Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » std::find_if funktionsobjekte kombinieren

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
25.07.2008, 03:58 Uhr
xXx
Devil


Also:

C++:
    const std::list<Frame*>::const_iterator it_caption(std::find_if(m_windows.begin(), m_windows.end(), std::bind2nd(std::mem_fun(&Frame::hit_test_caption), point_mouse)));
const std::list<Frame*>::const_iterator it_content(std::find_if(m_windows.begin(), m_windows.end(), std::bind2nd(std::mem_fun(&Frame::hit_test_content), point_mouse)));
const std::list<Frame*>::const_iterator it(std::distance<std::list<Frame*>::const_iterator>(m_windows.begin(), it_caption) < std::distance<std::list<Frame*>::const_iterator>(m_windows.begin(), it_content) ? it_caption : it_content);

So hab ich mir jetzt ausgeholfen, aber das ist natürlich vollkommen unperformant und eigtl. einfach beschissen. Gibt es kein Funktionsobjekt, dass mir or implementiert?

C++:
std::or(std::bind2nd(std::mem_fun(&Frame::hit_test_caption), point_mouse),  std::bind2nd(std::mem_fun(&Frame::hit_test_content), point_mouse));
? ^^

Nja sowas:

C++:
    const std::list<Frame*>::const_iterator it(std::find_if(m_windows.begin(), m_windows.end(), std::compose2(std::logical_or<bool>(), std::bind2nd(std::mem_fun(&Frame::hit_test_caption), point_mouse), std::bind2nd(std::mem_fun(&Frame::hit_test_content), point_mouse)));
würde mit SGI-STL-Extensions gehen Aber gibt es sowas auch im normalen Standard?

Hab hier gerade nen Template-Function-Object gefunden, was dem std::compose2 entsprechen soll. Aber gibt es nichts einfacheres?

C++:
#include <functional>

/* class for the compose_f_gx_hx adapter
*/

template <class OP1, class OP2, class OP3>
class compose_f_gx_hx_t
: public std::unary_function<typename OP2::argument_type,
                              typename OP1::result_type>
{
  private:
    OP1 op1;    // process: op1(op2(x),op3(x))
    OP2 op2;
    OP3 op3;
  public:
    // constructor
    compose_f_gx_hx_t (const OP1& o1, const OP2& o2, const OP3& o3)
     : op1(o1), op2(o2), op3(o3) {
    }

    // function call
    typename OP1::result_type
    operator()(const typename OP2::argument_type& x) const {
        return op1(op2(x),op3(x));
    }
};

/* convenience function for the compose_f_gx_hx adapter
*/

template <class OP1, class OP2, class OP3>
inline compose_f_gx_hx_t<OP1,OP2,OP3>
compose_f_gx_hx (const OP1& o1, const OP2& o2, const OP3& o3) {
    return compose_f_gx_hx_t<OP1,OP2,OP3>(o1,o2,o3);
}
...

Dieser Post wurde am 25.07.2008 um 04:09 Uhr von xXx editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: