54 #ifndef LELY_UTIL_C_CALL_HPP_ 55 #define LELY_UTIL_C_CALL_HPP_ 61 template <
class,
class>
64 template <
class,
class>
66 template <class F, class C, typename c_mem_fn<F, C>::type>
74 template <
class,
class>
77 template <
class T,
class... S>
83 template <
class T,
class... S>
87 template <
class T,
class S>
98 template <
class R,
class... ArgTypes,
class F>
101 function(ArgTypes... args,
void* data) noexcept {
102 return (*static_cast<F*>(data))(args...);
110 template <
class R,
class... ArgTypes,
class F>
118 template <
class R,
class... ArgTypes,
class C>
120 using type = R (C::*)(ArgTypes...);
127 template <
class R,
class... ArgTypes,
class C>
135 template <
class R,
class... ArgTypes,
class C,
139 function(ArgTypes... args,
void* data) noexcept {
140 return ((*static_cast<C*>(data)).*M)(args...);
148 template <
class R,
class... ArgTypes,
class C,
149 typename c_mem_fn<R (*)(ArgTypes...), C>::type M>
155 #endif // !LELY_UTIL_C_CALL_HPP_
Pops a type from the back of a parameter pack.
This is the public header file of the utilities library.