binders.hpp
来自「support vector clustering for vc++」· HPP 代码 · 共 2,270 行 · 第 1/5 页
HPP
2,270 行
//////////////////////////////////
template <typename RT,
typename A, typename B, typename C, typename D, typename E,
typename F
>
inline function_ptr<RT, A, B, C, D, E, F>
bind(RT(*fptr)(A, B, C, D, E, F))
{
return function_ptr<RT, A, B, C, D, E, F>(fptr);
}
#if PHOENIX_LIMIT > 6
///////////////////////////////////////////////////////////////////////////////
//
// Function pointer binder (specialization for 7 args)
//
///////////////////////////////////////////////////////////////////////////////
template <typename RT,
typename A, typename B, typename C, typename D, typename E,
typename F, typename G
>
struct function_ptr_action<RT,
A, B, C, D, E, F, G, nil_t, nil_t,
#if PHOENIX_LIMIT > 9
nil_t, nil_t, nil_t,
#if PHOENIX_LIMIT > 12
nil_t, nil_t, nil_t,
#endif
#endif
nil_t // Unused
> {
typedef RT result_type;
typedef RT(*func_ptr_t)(A, B, C, D, E, F, G);
template <
typename A_, typename B_, typename C_, typename D_, typename E_,
typename F_, typename G_
>
struct result { typedef result_type type; };
function_ptr_action(func_ptr_t fptr_)
: fptr(fptr_) {}
result_type operator()(
A a, B b, C c, D d, E e,
F f, G g
) const
{ return fptr(a, b, c, d, e, f, g); }
func_ptr_t fptr;
};
//////////////////////////////////
template <typename RT,
typename A, typename B, typename C, typename D, typename E,
typename F, typename G
>
inline function_ptr<RT, A, B, C, D, E, F, G>
bind(RT(*fptr)(A, B, C, D, E, F, G))
{
return function_ptr<RT, A, B, C, D, E, F, G>(fptr);
}
///////////////////////////////////////////////////////////////////////////////
//
// Function pointer binder (specialization for 8 args)
//
///////////////////////////////////////////////////////////////////////////////
template <typename RT,
typename A, typename B, typename C, typename D, typename E,
typename F, typename G, typename H
>
struct function_ptr_action<RT,
A, B, C, D, E, F, G, H, nil_t,
#if PHOENIX_LIMIT > 9
nil_t, nil_t, nil_t,
#if PHOENIX_LIMIT > 12
nil_t, nil_t, nil_t,
#endif
#endif
nil_t // Unused
> {
typedef RT result_type;
typedef RT(*func_ptr_t)(A, B, C, D, E, F, G, H);
template <
typename A_, typename B_, typename C_, typename D_, typename E_,
typename F_, typename G_, typename H_
>
struct result { typedef result_type type; };
function_ptr_action(func_ptr_t fptr_)
: fptr(fptr_) {}
result_type operator()(
A a, B b, C c, D d, E e,
F f, G g, H h
) const
{ return fptr(a, b, c, d, e, f, g, h); }
func_ptr_t fptr;
};
//////////////////////////////////
template <typename RT,
typename A, typename B, typename C, typename D, typename E,
typename F, typename G, typename H
>
inline function_ptr<RT, A, B, C, D, E, F, G, H>
bind(RT(*fptr)(A, B, C, D, E, F, G, H))
{
return function_ptr<RT, A, B, C, D, E, F, G, H>(fptr);
}
///////////////////////////////////////////////////////////////////////////////
//
// Function pointer binder (specialization for 9 args)
//
///////////////////////////////////////////////////////////////////////////////
template <typename RT,
typename A, typename B, typename C, typename D, typename E,
typename F, typename G, typename H, typename I
>
struct function_ptr_action<RT,
A, B, C, D, E, F, G, H, I,
#if PHOENIX_LIMIT > 9
nil_t, nil_t, nil_t,
#if PHOENIX_LIMIT > 12
nil_t, nil_t, nil_t,
#endif
#endif
nil_t // Unused
> {
typedef RT result_type;
typedef RT(*func_ptr_t)(A, B, C, D, E, F, G, H, I);
template <
typename A_, typename B_, typename C_, typename D_, typename E_,
typename F_, typename G_, typename H_, typename I_
>
struct result { typedef result_type type; };
function_ptr_action(func_ptr_t fptr_)
: fptr(fptr_) {}
result_type operator()(
A a, B b, C c, D d, E e,
F f, G g, H h, I i
) const
{ return fptr(a, b, c, d, e, f, g, h, i); }
func_ptr_t fptr;
};
//////////////////////////////////
template <typename RT,
typename A, typename B, typename C, typename D, typename E,
typename F, typename G, typename H, typename I
>
inline function_ptr<RT, A, B, C, D, E, F, G, H, I>
bind(RT(*fptr)(A, B, C, D, E, F, G, H, I))
{
return function_ptr<RT, A, B, C, D, E, F, G, H, I>(fptr);
}
#if PHOENIX_LIMIT > 9
///////////////////////////////////////////////////////////////////////////////
//
// Function pointer binder (specialization for 10 args)
//
///////////////////////////////////////////////////////////////////////////////
template <typename RT,
typename A, typename B, typename C, typename D, typename E,
typename F, typename G, typename H, typename I, typename J
>
struct function_ptr_action<RT,
A, B, C, D, E, F, G, H, I, J, nil_t, nil_t,
#if PHOENIX_LIMIT > 12
nil_t, nil_t, nil_t,
#endif
nil_t // Unused
> {
typedef RT result_type;
typedef RT(*func_ptr_t)(A, B, C, D, E, F, G, H, I, J);
template <
typename A_, typename B_, typename C_, typename D_, typename E_,
typename F_, typename G_, typename H_, typename I_, typename J_
>
struct result { typedef result_type type; };
function_ptr_action(func_ptr_t fptr_)
: fptr(fptr_) {}
result_type operator()(
A a, B b, C c, D d, E e,
F f, G g, H h, I i, J j
) const
{ return fptr(a, b, c, d, e, f, g, h, i, j); }
func_ptr_t fptr;
};
//////////////////////////////////
template <typename RT,
typename A, typename B, typename C, typename D, typename E,
typename F, typename G, typename H, typename I, typename J
>
inline function_ptr<RT, A, B, C, D, E, F, G, H, I, J>
bind(RT(*fptr)(A, B, C, D, E, F, G, H, I, J))
{
return function_ptr<RT, A, B, C, D, E, F, G, H, I, J>(fptr);
}
///////////////////////////////////////////////////////////////////////////////
//
// Function pointer binder (specialization for 11 args)
//
///////////////////////////////////////////////////////////////////////////////
template <typename RT,
typename A, typename B, typename C, typename D, typename E,
typename F, typename G, typename H, typename I, typename J,
typename K
>
struct function_ptr_action<RT,
A, B, C, D, E, F, G, H, I, J, K, nil_t,
#if PHOENIX_LIMIT > 12
nil_t, nil_t, nil_t,
#endif
nil_t // Unused
> {
typedef RT result_type;
typedef RT(*func_ptr_t)(A, B, C, D, E, F, G, H, I, J, K);
template <
typename A_, typename B_, typename C_, typename D_, typename E_,
typename F_, typename G_, typename H_, typename I_, typename J_,
typename K_
>
struct result { typedef result_type type; };
function_ptr_action(func_ptr_t fptr_)
: fptr(fptr_) {}
result_type operator()(
A a, B b, C c, D d, E e,
F f, G g, H h, I i, J j,
K k
) const
{ return fptr(a, b, c, d, e, f, g, h, i, j, k); }
func_ptr_t fptr;
};
//////////////////////////////////
template <typename RT,
typename A, typename B, typename C, typename D, typename E,
typename F, typename G, typename H, typename I, typename J,
typename K
>
inline function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K>
bind(RT(*fptr)(A, B, C, D, E, F, G, H, I, J, K))
{
return function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K>(fptr);
}
///////////////////////////////////////////////////////////////////////////////
//
// Function pointer binder (specialization for 12 args)
//
///////////////////////////////////////////////////////////////////////////////
template <typename RT,
typename A, typename B, typename C, typename D, typename E,
typename F, typename G, typename H, typename I, typename J,
typename K, typename L
>
struct function_ptr_action<RT,
A, B, C, D, E, F, G, H, I, J, K, L,
#if PHOENIX_LIMIT > 12
nil_t, nil_t, nil_t,
#endif
nil_t // Unused
> {
typedef RT result_type;
typedef RT(*func_ptr_t)(A, B, C, D, E, F, G, H, I, J, K, L);
template <
typename A_, typename B_, typename C_, typename D_, typename E_,
typename F_, typename G_, typename H_, typename I_, typename J_,
typename K_, typename L_
>
struct result { typedef result_type type; };
function_ptr_action(func_ptr_t fptr_)
: fptr(fptr_) {}
result_type operator()(
A a, B b, C c, D d, E e,
F f, G g, H h, I i, J j,
K k, L l
) const
{ return fptr(a, b, c, d, e, f, g, h, i, j, k, l); }
func_ptr_t fptr;
};
//////////////////////////////////
template <typename RT,
typename A, typename B, typename C, typename D, typename E,
typename F, typename G, typename H, typename I, typename J,
typename K, typename L
>
inline function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K, L>
bind(RT(*fptr)(A, B, C, D, E, F, G, H, I, J, K, L))
{
return function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K, L>(fptr);
}
#if PHOENIX_LIMIT > 12
///////////////////////////////////////////////////////////////////////////////
//
// Function pointer binder (specialization for 13 args)
//
///////////////////////////////////////////////////////////////////////////////
template <typename RT,
typename A, typename B, typename C, typename D, typename E,
typename F, typename G, typename H, typename I, typename J,
typename K, typename L, typename M
>
struct function_ptr_action<RT,
A, B, C, D, E, F, G, H, I, J, K, L, M, nil_t, nil_t, nil_t> {
typedef RT result_type;
typedef RT(*func_ptr_t)(A, B, C, D, E, F, G, H, I, J, K, L, M);
template <
typename A_, typename B_, typename C_, typename D_, typename E_,
typename F_, typename G_, typename H_, typename I_, typename J_,
typename K_, typename L_, typename M_
>
struct result { typedef result_type type; };
function_ptr_action(func_ptr_t fptr_)
: fptr(fptr_) {}
result_type operator()(
A a, B b, C c, D d, E e,
F f, G g, H h, I i, J j,
K k, L l, M m
) const
{ return fptr(a, b, c, d, e, f, g, h, i, j, k, l, m); }
func_ptr_t fptr;
};
//////////////////////////////////
template <typename RT,
typename A, typename B, typename C, typename D, typename E,
typename F, typename G, typename H, typename I, typename J,
typename K, typename L, typename M
>
inline function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K, L, M>
bind(RT(*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M))
{
return function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K, L, M>(fptr);
}
///////////////////////////////////////////////////////////////////////////////
//
// Function pointer binder (specialization for 14 args)
//
///////////////////////////////////////////////////////////////////////////////
template <typename RT,
typename A, typename B, typename C, typename D, typename E,
typename F, typename G, typename H, typename I, typename J,
typename K, typename L, typename M, typename N
>
struct function_ptr_action<RT,
A, B, C, D, E, F, G, H, I, J, K, L, M, N, nil_t, nil_t> {
typedef RT result_type;
typedef RT(*func_ptr_t)(A, B, C, D, E, F, G, H, I, J, K, L, M, N);
template <
typename A_, typename B_, typename C_, typename D_, typename E_,
typename F_, typename G_, typename H_, typename I_, typename J_,
typename K_, typename L_, typename M_, typename N_
>
struct result { typedef result_type type; };
function_ptr_action(func_ptr_t fptr_)
: fptr(fptr_) {}
result_type operator()(
A a, B b, C c, D d, E e,
F f, G g, H h, I i, J j,
K k, L l, M m, N n
) const
{ return fptr(a, b, c, d, e, f, g, h, i, j, k, l, m, n); }
func_ptr_t fptr;
};
//////////////////////////////////
template <typename RT,
typename A, typename B, typename C, typename D, typename E,
typename F, typename G, typename H, typename I, typename J,
typename K, typename L, typename M, typename N
>
inline function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K, L, M, N>
bind(RT(*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N))
{
return function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K, L, M, N>(fptr);
}
///////////////////////////////////////////////////////////////////////////////
//
// Function pointer binder (specialization for 15 args)
//
///////////////////////////////////////////////////////////////////////////////
template <typename RT,
typename A, typename B, typename C, typename D, typename E,
typename F, typename G, typename H, typename I, typename J,
typename K, typename L, typename M, typename N, typename O
>
struct function_ptr_action<RT,
A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, nil_t> {
typedef RT result_type;
typedef RT(*func_ptr_t)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O);
template <
typename A_, typename B_, typename C_, typename D_, typename E_,
typename F_, typename G_, typename H_, typename I_, typename J_,
typename K_, typename L_, typename M_, typename N_, typename O_
>
struct result { typedef result_type type; };
function_ptr_action(func_ptr_t fptr_)
: fptr(fptr_) {}
result_type operator()(
A a, B b, C c, D d, E e,
F f, G g, H h, I i, J j,
K k, L l, M m, N n, O o
) const
{ return fptr(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o); }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?