add MemberFunctionWrapper to conveniently use member functions as predicates
This commit is contained in:
@@ -250,6 +250,39 @@ using RegularQuad = Regular<4,3>;
|
|||||||
using RegularTri = Regular<6,4>;
|
using RegularTri = Regular<6,4>;
|
||||||
|
|
||||||
|
|
||||||
|
/// Wrapper object to hold an object and a member function pointer,
|
||||||
|
/// and provides operator() to call that member function for that object with one argument
|
||||||
|
template <typename T, typename MF>
|
||||||
|
struct MemberFunctionWrapper
|
||||||
|
{
|
||||||
|
T t_; // Objects whose member function we want to call
|
||||||
|
MF mf_; // pointer to member function
|
||||||
|
|
||||||
|
MemberFunctionWrapper(T _t, MF _mf)
|
||||||
|
:
|
||||||
|
t_(_t),
|
||||||
|
mf_(_mf)
|
||||||
|
{}
|
||||||
|
|
||||||
|
template <typename O>
|
||||||
|
auto operator()(const O& _o) -> decltype ((t_.*mf_)(_o))
|
||||||
|
{
|
||||||
|
return (t_.*mf_)(_o);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Helper to create a MemberFunctionWrapper without explicitely naming the types
|
||||||
|
template <typename T, typename MF>
|
||||||
|
MemberFunctionWrapper<T,MF> make_member_function_wrapper(T&& _t, MF _mf)
|
||||||
|
{
|
||||||
|
return MemberFunctionWrapper<T,MF>(std::forward<T>(_t), _mf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Convenience macro to create a MemberFunctionWrapper for *this object
|
||||||
|
#define OM_MFW(member_function) OpenMesh::Predicates::make_member_function_wrapper(*this, &std::decay<decltype(*this)>::type::member_function)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
} // namespace Predicates
|
} // namespace Predicates
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user