Changeset 348
- Timestamp:
- 01/03/15 23:23:41 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/nv/lua/lua_dispatch.hh
r345 r348 41 41 } 42 42 template <class C, typename... Args, typename... Vs> 43 static void do_call(lua_State* L, C &c, R(C::*func)(Args...), Vs&&... vs)43 static void do_call(lua_State* L, C* c, R(C::*func)(Args...), Vs&&... vs) 44 44 { 45 push_value(L, (c.*func)(std::forward<Vs>(vs)...)); 45 push_value(L, (*c.*func)(std::forward<Vs>(vs)...)); 46 } 47 template <class C, typename... Args, typename... Vs> 48 static void do_call( lua_State* L, C const * c, R( C::*func )( Args... ) const, Vs&&... vs ) 49 { 50 push_value( L, ( *c.*func )( std::forward<Vs>( vs )... ) ); 46 51 } 47 52 }; … … 56 61 } 57 62 template <class C, typename... Args, typename... Vs> 58 static void do_call(lua_State*, C &c, void(C::*func)(Args...), Vs&&... vs)63 static void do_call(lua_State*, C* c, void(C::*func)(Args...), Vs&&... vs) 59 64 { 60 (c.*func)(std::forward<Vs>(vs)...); 65 (*c.*func)(std::forward<Vs>(vs)...); 66 } 67 template <class C, typename... Args, typename... Vs> 68 static void do_call( lua_State*, C const * c, void( C::*func )( Args... ) const, Vs&&... vs ) 69 { 70 ( *c.*func )( std::forward<Vs>( vs )... ); 61 71 } 62 72 }; … … 69 79 70 80 template <typename R, class C, typename... Args, typename Head, typename ...Tail, typename... Vs> 71 int do_call(lua_State* L, int index, C &c, R(C::*func)(Args...), types<Head, Tail...>, Vs&&... vs)81 int do_call(lua_State* L, int index, C* c, R(C::*func)(Args...), types<Head, Tail...>, Vs&&... vs) 72 82 { 73 83 do_call(L, index + 1, c, func, types < Tail... > {}, std::forward<Vs>(vs)..., get_value<Head>(L, index)); return 1; 84 } 85 86 template <typename R, class C, typename... Args, typename Head, typename ...Tail, typename... Vs> 87 int do_call( lua_State* L, int index, C const * c, R( C::*func )( Args... ) const, types<Head, Tail...>, Vs&&... vs ) 88 { 89 do_call( L, index + 1, c, func, types < Tail... > {}, std::forward<Vs>( vs )..., get_value<Head>( L, index ) ); return 1; 74 90 } 75 91 … … 82 98 83 99 template <typename R, class C, typename... Args, typename... Vs> 84 int do_call(lua_State* L, int, C &c, R(C::*func)(Args...), types<>, Vs&&... vs)100 int do_call(lua_State* L, int, C* c, R(C::*func)(Args...), types<>, Vs&&... vs) 85 101 { 86 102 call_and_push<R>::do_call(L, c, func, std::forward<Vs>(vs)...); 103 return 1; 104 } 105 106 template <typename R, class C, typename... Args, typename... Vs> 107 int do_call( lua_State* L, int, C const * c, R( C::*func )( Args... ) const, types<>, Vs&&... vs ) 108 { 109 call_and_push<R>::do_call( L, c, func, std::forward<Vs>( vs )... ); 87 110 return 1; 88 111 } … … 95 118 } 96 119 template < typename R, class C, typename... Args > 97 int dispatch(lua_State* L, int index, C & c, R(C::*func)(Args...))120 int dispatch(lua_State* L, int index, C* c, R( C::*func )( Args... ) ) 98 121 { 99 122 do_call(L, index, c, func, types < Args... > {}); 100 123 return 1; 101 124 } 125 template < typename R, class C, typename... Args > 126 int dispatch( lua_State* L, int index, C const * c, R( C::*func )( Args... ) const ) 127 { 128 do_call( L, index, c, func, types < Args... > {} ); 129 return 1; 130 } 131 102 132 103 133 template < typename F, F f > … … 111 141 { 112 142 C* c = (C*)to_ref_object( L, 1 ); 113 return dispatch( L, 2, *c, f );143 return dispatch( L, 2, c, f ); 114 144 } 115 145 … … 118 148 { 119 149 C* c = (C*)to_pointer( L, nv::lua::detail::upvalue_index(1) ); 120 return dispatch( L, 1, *c, f );150 return dispatch( L, 1, c, f ); 121 151 } 122 152
Note: See TracChangeset
for help on using the changeset viewer.