1515 * \param f Function pointer.
1616 * \param args Parameter pack for `f`.
1717 */
18- template <class R , class ... FArgs , class ... Args >
19- void call_ (Stream& io, void (*)(), R (*f)(FArgs ...), Args &... args) {
18+ template <class T , class ... Ts , class ... Us >
19+ void call_ (Stream& io, void (*)(), T (*f)(Ts ...), Us &... args) {
2020 /*
2121 * All parameters have been collected since function pointer `*f_` has no
2222 * parameter types. All values are now present in the `args` parameter pack.
2323 */
24- R data {f (args...)};
25-
24+ T data {f (args...)};
2625 rpcWrite (io, &data);
2726}
2827
@@ -35,24 +34,23 @@ void call_(Stream& io, void (*)(), R (*f)(FArgs...), Args&... args) {
3534 * to a class method.
3635 * \param args Parameter pack for `f`.
3736 */
38- template <class C , class P , class R , class ... FArgs , class ... Args >
37+ template <class C , class P , class T , class ... Ts , class ... Us >
3938void call_ (
40- Stream& io, void (*)(), Tuple<C*, R (P::*)(FArgs...)> t, Args&... args) {
41- R data {(*t.head .*t.tail .head )(args...)};
42-
39+ Stream& io, void (*)(), Tuple<C*, T (P::*)(Ts...)> t, Us&... args) {
40+ T data {(*t.head .*t.tail .head )(args...)};
4341 rpcWrite (io, &data);
4442}
4543
46- // ! \copydoc call_(Stream&, void (*)(), R (*)(FArgs ...), Args &...)
47- template <class ... FArgs , class ... Args >
48- void call_ (Stream&, void (*)(), void (*f)(FArgs ...), Args &... args) {
44+ // ! \copydoc call_(Stream&, void (*)(), T (*)(Ts ...), Us &...)
45+ template <class ... Ts , class ... Us >
46+ void call_ (Stream&, void (*)(), void (*f)(Ts ...), Us &... args) {
4947 f (args...);
5048}
5149
52- // ! \copydoc call_(Stream&, void (*)(), R (*)(FArgs ...), Args &...)
53- template <class C , class P , class ... FArgs , class ... Args >
50+ // ! \copydoc call_(Stream&, void (*)(), T (*)(Ts ...), Us &...)
51+ template <class C , class P , class ... Ts , class ... Us >
5452void call_ (
55- Stream&, void (*)(), Tuple<C*, void (P::*)(FArgs ...)> t, Args &... args) {
53+ Stream&, void (*)(), Tuple<C*, void (P::*)(Ts ...)> t, Us &... args) {
5654 (*t.head .*t.tail .head )(args...);
5755}
5856
@@ -65,27 +63,27 @@ void call_(
6563 * \param f Function pointer.
6664 * \param args Parameter pack for `f`.
6765 */
68- template <class H , class ... Tail , class F , class ... Args >
69- void call_ (Stream& io, void (*)(H, Tail ...), F f, Args &... args) {
66+ template <class T , class ... Ts , class F , class ... Us >
67+ void call_ (Stream& io, void (*)(T, Ts ...), F f, Us &... args) {
7068 /*
71- * The first parameter type `H ` is isolated from the function pointer. This
69+ * The first parameter type `T ` is isolated from the function pointer. This
7270 * type is used to instantiate the variable `data`, which is used to receive
73- * `sizeof(H )` bytes. This value is passed recursively to `call_()` function,
74- * adding it to the `args` parameter pack. The first parameter type `H ` is
71+ * `sizeof(T )` bytes. This value is passed recursively to `call_()` function,
72+ * adding it to the `args` parameter pack. The first parameter type `T ` is
7573 * removed from the function pointer in the recursive call.
7674 */
77- H data;
75+ T data;
7876 rpcRead (io, &data);
7977
80- void (*f_)(Tail ...) {};
78+ void (*f_)(Ts ...) {};
8179 call_ (io, f_, f, args..., data);
8280 rpcDel (&data);
8381}
8482
85- // ! \copydoc call_(Stream&, void (*)(H, Tail ...), F, Args &...)
86- template <class H , class ... Tail , class F , class ... Args >
87- void call_ (Stream& io, void (*)(H &, Tail ...), F f, Args &... args) {
88- void (*f_)(H, Tail ...) {};
83+ // ! \copydoc call_(Stream&, void (*)(T, Ts ...), F, Us &...)
84+ template <class T , class ... Ts , class F , class ... Us >
85+ void call_ (Stream& io, void (*)(T &, Ts ...), F f, Us &... args) {
86+ void (*f_)(T, Ts ...) {};
8987 call_ (io, f_, f, args...);
9088}
9189
@@ -99,28 +97,28 @@ void call_(Stream& io, void (*)(H&, Tail...), F f, Args&... args) {
9997 * \param io Stream.
10098 * \param f Function pointer.
10199 */
102- template <class R , class ... FArgs >
103- void rpcCall (Stream& io, R (*f)(FArgs ...)) {
100+ template <class T , class ... Ts >
101+ void rpcCall (Stream& io, T (*f)(Ts ...)) {
104102 /*
105103 * A dummy function pointer is prepared, which will be used to isolate
106104 * parameter types. The return type of this function pointer is removed to
107105 * avoid unneeded template expansion.
108106 */
109- void (*f_)(FArgs ...) {};
107+ void (*f_)(Ts ...) {};
110108 call_ (io, f_, f);
111109}
112110
113111/* ! \ingroup call
114112 * Call a class method.
115113 *
116- * \sa rpcCall(Stream&, R (*)(FArgs ...))
114+ * \sa rpcCall(Stream&, T (*)(Ts ...))
117115 *
118116 * \param io Stream.
119117 * \param t Tuple consisting of a pointer to a class instance and a pointer
120118 * to a class method.
121119 */
122- template <class C , class P , class R , class ... FArgs >
123- void rpcCall (Stream& io, Tuple<C*, R (P::*)(FArgs ...)> t) {
124- void (*f_)(FArgs ...) {};
120+ template <class C , class P , class T , class ... Ts >
121+ void rpcCall (Stream& io, Tuple<C*, T (P::*)(Ts ...)> t) {
122+ void (*f_)(Ts ...) {};
125123 call_ (io, f_, t);
126124}
0 commit comments