7 #ifndef MANAK_UTIL_TEMPLATE_UTILS_HPP_INCLUDED
8 #define MANAK_UTIL_TEMPLATE_UTILS_HPP_INCLUDED
28 struct is_placeholder<manak::utils::helper::template_placeholder<N>>
29 : integral_constant<int, N>
45 template<
int N,
int... Args>
48 return Hold<Args..., N>();
63 template<
typename RType,
typename... Args>
64 RType
Caller_3(std::function<RType(Args...)> fun, Args... args)
69 template<
typename RType,
typename Fun,
typename P,
int... S>
72 return fun(std::get<S - 1>(params)...);
76 struct template_placeholder
81 template<
typename RType,
typename F,
typename O,
int... S>
87 template<
typename RType,
typename F,
typename O,
int... S>
93 template<
typename RType,
typename F,
typename O>
96 return std::bind(fun, o);
99 template<
typename RType,
typename F,
typename O>
102 return std::bind(fun, o);
107 template<
typename RType,
typename P,
typename... Args>
108 RType
Caller(std::function<RType(Args...)> fun, P params)
110 return helper::Caller_2<RType>(fun, params,
typename helper::SGenerate<
sizeof...(Args)>::type());
119 template<
typename RType,
typename P,
typename... Args>
120 RType
Caller(RType (*fun)(Args...), P params)
122 return helper::Caller_2<RType>(fun, params,
typename helper::SGenerate<
sizeof...(Args)>::type());
126 template<
typename RType,
typename C,
typename... Args>
127 std::function<RType(Args...)>
BindToObject(RType (C::*fun)(Args...), C* c)
132 template<
typename RType,
typename C,
typename... Args>
133 std::function<RType(Args...)>
BindToObject(RType (C::*fun)(Args...)
const,
const C* c)
138 template<
typename RType,
typename C,
typename... Args>
139 std::function<RType(Args...)>
BindToObject(RType (C::*fun)(Args...)
const, C* c)
141 return helper::BindToObject2<std::function<RType(Args...)>>(fun, c,
typename helper::SGenerate<
sizeof...(Args)>::type());
144 template<
typename RType,
typename C,
typename... Args>
150 template<
typename RType,
typename C,
typename... Args>
151 std::function<RType(Args...)>
BindToObject(RType (C::*fun)()
const,
const C* c)
156 template<
typename RType,
typename C,
typename... Args>
157 std::function<RType(Args...)>
BindToObject(RType (C::*fun)()
const, C* c)
168 #endif // MANAK_UTIL_TEMPLATE_UTILS_HPP_INCLUDED
RType Caller(std::function< RType(Args...)> fun, P params)
RType Caller_3(std::function< RType(Args...)> fun, Args...args)
RType BindToObject2(F fun, const O *o, Hold< S...>)
Hold< Args..., N > Combine(Hold< Args...>, Hold< N >)
std::function< RType(Args...)> BindToObject(RType(C::*fun)(Args...), C *c)
RType Caller_2(Fun fun, P params, Hold< S...>)
decltype(Combine(typename SGenerate< N-1 >::type(), Hold< N >())) typedef type