6 #ifndef CPPIPC_CLIENT_ISSUE_HPP 7 #define CPPIPC_CLIENT_ISSUE_HPP 9 #include <boost/function.hpp> 10 #include <boost/type_traits.hpp> 11 #include <boost/function_types/function_type.hpp> 12 #include <boost/function_types/parameter_types.hpp> 13 #include <core/storage/serialization/iarchive.hpp> 14 #include <core/storage/serialization/oarchive.hpp> 15 #include <core/generics/remove_member_pointer.hpp> 16 #include <core/system/cppipc/util/generics/member_function_return_type.hpp> 17 #include <core/system/cppipc/util/generics/tuple.hpp> 18 #include <core/system/cppipc/ipc_object_base.hpp> 19 #include <type_traits> 31 template <
typename ArgumentTuple,
typename... Args>
39 template <
typename ArgumentTuple,
typename Arg,
typename... Args>
42 const Arg& a,
const Args&... args) {
43 static_assert(1 +
sizeof...(Args) == std::tuple_size<ArgumentTuple>::value,
"Argument Count Mismatch");
44 typedef typename std::tuple_element<0, ArgumentTuple>::type arg_type;
46 typedef typename std::decay<arg_type>::type decayed_arg_type;
47 if (std::is_same<decayed_arg_type, Arg>::value) {
50 msg << (decayed_arg_type)(a);
52 typedef typename left_shift_tuple<ArgumentTuple>::type shifted_tuple;
63 template <
typename... Args>
66 static_assert(
sizeof...(Args) == 0,
"Too Many Arguments");
78 template <
typename MemFn,
typename... Args>
81 const Args&... args) {
82 typedef typename boost::remove_member_pointer<MemFn>::type fntype;
The serialization output archive object which, provided with a reference to an ostream, will write to the ostream, providing serialization capabilities.
void issue(turi::oarchive &msg, MemFn fn, const Args &... args)