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. |