📄 method_adaptors.hpp
字号:
private:
method_type m_func;
};
template< ss_typename_param_k T
>
struct stdcall_mem_fun_ref_const_void_t
: public stlsoft_ns_qual_std(unary_function)<T*, void>
{
public:
typedef void return_type;
typedef T operand_class_type;
#ifdef STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED
typedef return_type STLSOFT_STDCALL (T::*method_type)() const;
#else /* ? STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
typedef return_type (STLSOFT_STDCALL T::*method_type)() const;
#endif /* STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
public:
ss_explicit_k stdcall_mem_fun_ref_const_void_t(method_type func)
: m_func(func)
{}
void operator ()(operand_class_type const& rt) const
{
(rt.*m_func)();
}
private:
method_type m_func;
};
# endif /* STLSOFT_CF_COMPILER_SUPPORTS_RETURN_VOID */
#endif /* STLSOFT_CF_STDCALL_SUPPORTED */
/* /////////////////////////////////////////////////////////////////////////
* Creator functions
*/
// cdecl
#ifdef STLSOFT_CF_CDECL_SUPPORTED
/** \brief Creator function to adapt a pointer to a 0-parameter mutating
* (non-const) member function, for use with a pointer to the class.
*
* \ingroup group__library__functional
*/
template< ss_typename_param_k R
, ss_typename_param_k T
>
#ifdef STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED
inline cdecl_mem_fun_t<R, T> mem_fun(R (T::*STLSOFT_CDECL func)())
#else /* ? STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
inline cdecl_mem_fun_t<R, T> mem_fun(R (STLSOFT_CDECL T::*func)())
#endif /* STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
{
return cdecl_mem_fun_t<R, T>(func);
}
#if defined(STLSOFT_CF_COMPILER_SUPPORTS_RETURN_VOID)
/* We just provide mem_fun_void() that returns 'normal' type. */
template< ss_typename_param_k T
>
#ifdef STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED
inline cdecl_mem_fun_t<void, T> mem_fun_void(void (T::*STLSOFT_CDECL func)())
#else /* ? STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
inline cdecl_mem_fun_t<void, T> mem_fun_void(void (STLSOFT_CDECL T::*func)())
#endif /* STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
{
return cdecl_mem_fun_t<void, T>(func);
}
#else /* ? STLSOFT_CF_COMPILER_SUPPORTS_RETURN_VOID */
template< ss_typename_param_k T
>
#ifdef STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED
inline cdecl_mem_fun_void_t<T> mem_fun(void (T::*STLSOFT_CDECL func)())
#else /* ? STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
inline cdecl_mem_fun_void_t<T> mem_fun(void (STLSOFT_CDECL T::*func)())
#endif /* STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
{
return cdecl_mem_fun_void_t<T>(func);
}
template< ss_typename_param_k T
>
#ifdef STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED
inline cdecl_mem_fun_void_t<T> mem_fun_void(void (T::*STLSOFT_CDECL func)())
#else /* ? STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
inline cdecl_mem_fun_void_t<T> mem_fun_void(void (STLSOFT_CDECL T::*func)())
#endif /* STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
{
return cdecl_mem_fun_void_t<T>(func);
}
#endif /* STLSOFT_CF_COMPILER_SUPPORTS_RETURN_VOID */
/** \brief Creator function to adapt a pointer to a 0-parameter non-mutating
* (const) member function, for use with a pointer to the class.
*
* \ingroup group__library__functional
*/
template< ss_typename_param_k R
, ss_typename_param_k T
>
#ifdef STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED
inline cdecl_mem_fun_const_t<R, T> mem_fun(R (T::*STLSOFT_CDECL func)() const)
#else /* ? STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
inline cdecl_mem_fun_const_t<R, T> mem_fun(R (STLSOFT_CDECL T::*func)() const)
#endif /* STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
{
return cdecl_mem_fun_const_t<R, T>(func);
}
#if defined(STLSOFT_CF_COMPILER_SUPPORTS_RETURN_VOID)
/* We just provide mem_fun_const_void() that returns 'normal' type. */
template< ss_typename_param_k T
>
#ifdef STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED
inline cdecl_mem_fun_const_t<void, T> mem_fun_void(void (T::*STLSOFT_CDECL func)() const)
#else /* ? STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
inline cdecl_mem_fun_const_t<void, T> mem_fun_void(void (STLSOFT_CDECL T::*func)() const)
#endif /* STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
{
return cdecl_mem_fun_const_t<void, T>(func);
}
#else /* ? STLSOFT_CF_COMPILER_SUPPORTS_RETURN_VOID */
template< ss_typename_param_k T
>
#ifdef STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED
inline cdecl_mem_fun_const_void_t<T> mem_fun(void (T::*STLSOFT_CDECL func)() const)
#else /* ? STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
inline cdecl_mem_fun_const_void_t<T> mem_fun(void (STLSOFT_CDECL T::*func)() const)
#endif /* STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
{
return cdecl_mem_fun_const_void_t<T>(func);
}
template< ss_typename_param_k T
>
#ifdef STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED
inline cdecl_mem_fun_const_void_t<T> mem_fun_void(void (T::*STLSOFT_CDECL func)() const)
#else /* ? STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
inline cdecl_mem_fun_const_void_t<T> mem_fun_void(void (STLSOFT_CDECL T::*func)() const)
#endif /* STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
{
return cdecl_mem_fun_const_void_t<T>(func);
}
#endif /* STLSOFT_CF_COMPILER_SUPPORTS_RETURN_VOID */
#endif /* STLSOFT_CF_CDECL_SUPPORTED */
// fastcall
#ifdef STLSOFT_CF_FASTCALL_SUPPORTED
/** \brief Creator function to adapt a pointer to a 0-parameter mutating
* (non-const) member function, for use with a pointer to the class.
*
* \ingroup group__library__functional
*/
template< ss_typename_param_k R
, ss_typename_param_k T
>
#ifdef STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED
inline fastcall_mem_fun_t<R, T> mem_fun(R (T::*STLSOFT_FASTCALL func)())
#else /* ? STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
inline fastcall_mem_fun_t<R, T> mem_fun(R (STLSOFT_FASTCALL T::*func)())
#endif /* STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
{
return fastcall_mem_fun_t<R, T>(func);
}
# if defined(STLSOFT_CF_COMPILER_SUPPORTS_RETURN_VOID)
/* We just provide mem_fun_void() that returns 'normal' type. */
template< ss_typename_param_k T
>
#ifdef STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED
inline fastcall_mem_fun_t<void, T> mem_fun_void(void (T::*STLSOFT_FASTCALL func)())
#else /* ? STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
inline fastcall_mem_fun_t<void, T> mem_fun_void(void (STLSOFT_FASTCALL T::*func)())
#endif /* STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
{
return fastcall_mem_fun_t<void, T>(func);
}
# else /* ? STLSOFT_CF_COMPILER_SUPPORTS_RETURN_VOID */
template< ss_typename_param_k T
>
#ifdef STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED
inline fastcall_mem_fun_void_t<T> mem_fun(void (T::*STLSOFT_FASTCALL func)())
#else /* ? STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
inline fastcall_mem_fun_void_t<T> mem_fun(void (STLSOFT_FASTCALL T::*func)())
#endif /* STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
{
return fastcall_mem_fun_void_t<T>(func);
}
template< ss_typename_param_k T
>
#ifdef STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED
inline fastcall_mem_fun_void_t<T> mem_fun_void(void (T::*STLSOFT_FASTCALL func)())
#else /* ? STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
inline fastcall_mem_fun_void_t<T> mem_fun_void(void (STLSOFT_FASTCALL T::*func)())
#endif /* STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
{
return fastcall_mem_fun_void_t<T>(func);
}
# endif /* STLSOFT_CF_COMPILER_SUPPORTS_RETURN_VOID */
#endif /* STLSOFT_CF_FASTCALL_SUPPORTED */
/** \brief Creator function to adapt a pointer to a 0-parameter non-mutating
* (const) member function, for use with a pointer to the class.
*
* \ingroup group__library__functional
*/
#ifdef STLSOFT_CF_FASTCALL_SUPPORTED
template< ss_typename_param_k R
, ss_typename_param_k T
>
#ifdef STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED
inline fastcall_mem_fun_const_t<R, T> mem_fun(R (T::*STLSOFT_FASTCALL func)() const)
#else /* ? STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
inline fastcall_mem_fun_const_t<R, T> mem_fun(R (STLSOFT_FASTCALL T::*func)() const)
#endif /* STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
{
return fastcall_mem_fun_const_t<R, T>(func);
}
# if defined(STLSOFT_CF_COMPILER_SUPPORTS_RETURN_VOID)
/* We just provide mem_fun_void() that returns 'normal' type. */
template< ss_typename_param_k T
>
#ifdef STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED
inline fastcall_mem_fun_const_t<void, T> mem_fun_void(void (T::*STLSOFT_FASTCALL func)() const)
#else /* ? STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
inline fastcall_mem_fun_const_t<void, T> mem_fun_void(void (STLSOFT_FASTCALL T::*func)() const)
#endif /* STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
{
return fastcall_mem_fun_const_t<void, T>(func);
}
# else /* ? STLSOFT_CF_COMPILER_SUPPORTS_RETURN_VOID */
template< ss_typename_param_k T
>
#ifdef STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED
inline fastcall_mem_fun_const_void_t<T> mem_fun(void (T::*STLSOFT_FASTCALL func)() const)
#else /* ? STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
inline fastcall_mem_fun_const_void_t<T> mem_fun(void (STLSOFT_FASTCALL T::*func)() const)
#endif /* STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
{
return fastcall_mem_fun_const_void_t<T>(func);
}
template< ss_typename_param_k T
>
#ifdef STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED
inline fastcall_mem_fun_const_void_t<T> mem_fun_void(void (T::*STLSOFT_FASTCALL func)() const)
#else /* ? STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
inline fastcall_mem_fun_const_void_t<T> mem_fun_void(void (STLSOFT_FASTCALL T::*func)() const)
#endif /* STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
{
return fastcall_mem_fun_const_void_t<T>(func);
}
# endif /* STLSOFT_CF_COMPILER_SUPPORTS_RETURN_VOID */
#endif /* STLSOFT_CF_FASTCALL_SUPPORTED */
// stdcall
/** \brief Creator function to adapt a pointer to a 0-parameter mutating
* (non-const) member function, for use with a pointer to the class.
*
* \ingroup group__library__functional
*/
#ifdef STLSOFT_CF_STDCALL_SUPPORTED
template< ss_typename_param_k R
, ss_typename_param_k T
>
#ifdef STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED
inline stdcall_mem_fun_t<R, T> mem_fun(R (T::*STLSOFT_STDCALL func)())
#else /* ? STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
inline stdcall_mem_fun_t<R, T> mem_fun(R (STLSOFT_STDCALL T::*func)())
#endif /* STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
{
return stdcall_mem_fun_t<R, T>(func);
}
# if defined(STLSOFT_CF_COMPILER_SUPPORTS_RETURN_VOID)
/* We just provide mem_fun_void() that returns 'normal' type. */
template< ss_typename_param_k T
>
#ifdef STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED
inline stdcall_mem_fun_t<void, T> mem_fun_void(void (T::*STLSOFT_STDCALL func)())
#else /* ? STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
inline stdcall_mem_fun_t<void, T> mem_fun_void(void (STLSOFT_STDCALL T::*func)())
#endif /* STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
{
return stdcall_mem_fun_t<void, T>(func);
}
# else /* ? STLSOFT_CF_COMPILER_SUPPORTS_RETURN_VOID */
template< ss_typename_param_k T
>
#ifdef STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED
inline stdcall_mem_fun_void_t<T> mem_fun(void (T::*STLSOFT_STDCALL func)())
#else /* ? STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
inline stdcall_mem_fun_void_t<T> mem_fun(void (STLSOFT_STDCALL T::*func)())
#endif /* STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
{
return stdcall_mem_fun_void_t<T>(func);
}
template< ss_typename_param_k T
>
#ifdef STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED
inline stdcall_mem_fun_void_t<T> mem_fun_void(void (T::*STLSOFT_STDCALL func)())
#else /* ? STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
inline stdcall_mem_fun_void_t<T> mem_fun_void(void (STLSOFT_STDCALL T::*func)())
#endif /* STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
{
return stdcall_mem_fun_void_t<T>(func);
}
# endif /* STLSOFT_CF_COMPILER_SUPPORTS_RETURN_VOID */
#endif /* STLSOFT_CF_STDCALL_SUPPORTED */
/** \brief Creator function to adapt a pointer to a 0-parameter non-mutating
* (const) member function, for use with a pointer to the class.
*
* \ingroup group__library__functional
*/
#ifdef STLSOFT_CF_STDCALL_SUPPORTED
template< ss_typename_param_k R
, ss_typename_param_k T
>
#ifdef STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED
inline stdcall_mem_fun_const_t<R, T> mem_fun(R (T::*STLSOFT_STDCALL func)() const)
#else /* ? STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
inline stdcall_mem_fun_const_t<R, T> mem_fun(R (STLSOFT_STDCALL T::*func)() const)
#endif /* STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
{
return stdcall_mem_fun_const_t<R, T>(func);
}
# if defined(STLSOFT_CF_COMPILER_SUPPORTS_RETURN_VOID)
/* We just provide mem_fun_void() that returns 'normal' type. */
template< ss_typename_param_k T
>
#ifdef STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED
inline stdcall_mem_fun_const_t<void, T> mem_fun_void(void (T::*STLSOFT_STDCALL func)() const)
#else /* ? STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
inline stdcall_mem_fun_const_t<void, T> mem_fun_void(void (STLSOFT_STDCALL T::*func)() const)
#endif /* STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
{
return stdcall_mem_fun_const_t<void, T>(func);
}
# else /* ? STLSOFT_CF_COMPILER_SUPPORTS_RETURN_VOID */
template< ss_typename_param_k T
>
#ifdef STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED
inline stdcall_mem_fun_const_void_t<T> mem_fun(void (T::*STLSOFT_STDCALL func)() const)
#else /* ? STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
inline stdcall_mem_fun_const_void_t<T> mem_fun(void (STLSOFT_STDCALL T::*func)() const)
#endif /* STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
{
return stdcall_mem_fun_const_void_t<T>(func);
}
template< ss_typename_param_k T
>
#ifdef STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED
inline stdcall_mem_fun_const_void_t<T> mem_fun_void(void (T::*STLSOFT_STDCALL func)() const)
#else /* ? STLSOFT_CF_CALLING_CONVENTION_OUTSIDE_BRACE_REQUIRED */
inline stdcall_mem_fun_const_void_t<T> mem_fun_void(void (STLSOFT_STDCALL T::*func)() const)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -