📄 luaobject.inl
字号:
template <class V> void getValue( LuaState* luastate, int index, V& v )
{
luastate->toValue( index, v );
}
template <class V> void getValue( LuaState* luastate, int index, V*& v )
{
LuaTable* tab = LuaState::getThisPtr( luastate->impl(), index );
v = dynamic_cast<V*>(tab);
if ( 0 == v )
luastate->incorrectType( index );
}
template <class V> int pushValue( LuaState* luastate, const V& v )
{
luastate->pushValue( v );
return 1;
}
template <class R> class ReturnValue
{
public:
template <class R, class T> static int
callMethod( LuaState* luastate, T* thisptr, R (T::*funcptr)() )
{
return pushValue( luastate, (thisptr->*funcptr)() );
}
template <class R, class T, class A1> static int
callMethod( LuaState* luastate, T* thisptr, R (T::*funcptr)(A1) )
{
A1 a1; getValue(luastate,1,a1);
return pushValue( luastate, (thisptr->*funcptr)( a1 ) );
}
template <class R, class T, class A1, class A2> static int
callMethod( LuaState* luastate, T* thisptr, R (T::*funcptr)(A1,A2) )
{
A1 a1; getValue(luastate,1,a1);
A2 a2; getValue(luastate,2,a2);
return pushValue( luastate, (thisptr->*funcptr)( a1, a2 ) );
}
template <class R, class T, class A1, class A2, class A3> static int
callMethod( LuaState* luastate, T* thisptr, R (T::*funcptr)(A1,A2,A3) )
{
A1 a1; getValue(luastate,1,a1);
A2 a2; getValue(luastate,2,a2);
A3 a3; getValue(luastate,3,a3);
return pushValue( luastate, (thisptr->*funcptr)( a1, a2, a3 ) );
}
template <class R, class T, class A1, class A2, class A3, class A4> static int
callMethod( LuaState* luastate, T* thisptr, R (T::*funcptr)(A1,A2,A3,A4) )
{
A1 a1; getValue(luastate,1,a1);
A2 a2; getValue(luastate,2,a2);
A3 a3; getValue(luastate,3,a3);
A4 a4; getValue(luastate,4,a4);
return pushValue( luastate, (thisptr->*funcptr)( a1, a2, a3, a4 ) );
}
template <class R, class T, class A1, class A2, class A3, class A4, class A5> static int
callMethod( LuaState* luastate, T* thisptr, R (T::*funcptr)(A1,A2,A3,A4,A5) )
{
A1 a1; getValue(luastate,1,a1);
A2 a2; getValue(luastate,2,a2);
A3 a3; getValue(luastate,3,a3);
A4 a4; getValue(luastate,4,a4);
A5 a5; getValue(luastate,5,a5);
return pushValue( luastate, (thisptr->*funcptr)( a1, a2, a3, a4, a5 ) );
}
template <class R, class T, class A1, class A2, class A3, class A4, class A5, class A6> static int
callMethod( LuaState* luastate, T* thisptr, R (T::*funcptr)(A1,A2,A3,A4,A5,A6) )
{
A1 a1; getValue(luastate,1,a1);
A2 a2; getValue(luastate,2,a2);
A3 a3; getValue(luastate,3,a3);
A4 a4; getValue(luastate,4,a4);
A5 a5; getValue(luastate,5,a5);
A6 a6; getValue(luastate,6,a6);
return pushValue( luastate, (thisptr->*funcptr)( a1, a2, a3, a4, a5, a6 ) );
}
template <class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7> static int
callMethod( LuaState* luastate, T* thisptr, R (T::*funcptr)(A1,A2,A3,A4,A5,A6,A7) )
{
A1 a1; getValue(luastate,1,a1);
A2 a2; getValue(luastate,2,a2);
A3 a3; getValue(luastate,3,a3);
A4 a4; getValue(luastate,4,a4);
A5 a5; getValue(luastate,5,a5);
A6 a6; getValue(luastate,6,a6);
A7 a7; getValue(luastate,7,a7);
return pushValue( luastate, (thisptr->*funcptr)( a1, a2, a3, a4, a5, a6, a7 ) );
}
template <class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> static int
callMethod( LuaState* luastate, T* thisptr, R (T::*funcptr)(A1,A2,A3,A4,A5,A6,A7,A8) )
{
A1 a1; getValue(luastate,1,a1);
A2 a2; getValue(luastate,2,a2);
A3 a3; getValue(luastate,3,a3);
A4 a4; getValue(luastate,4,a4);
A5 a5; getValue(luastate,5,a5);
A6 a6; getValue(luastate,6,a6);
A7 a7; getValue(luastate,7,a7);
A8 a8; getValue(luastate,8,a8);
return pushValue( luastate, (thisptr->*funcptr)( a1, a2, a3, a4, a5, a6, a7, a8 ) );
}
template <class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> static int
callMethod( LuaState* luastate, T* thisptr, R (T::*funcptr)(A1,A2,A3,A4,A5,A6,A7,A8,A9) )
{
A1 a1; getValue(luastate,1,a1);
A2 a2; getValue(luastate,2,a2);
A3 a3; getValue(luastate,3,a3);
A4 a4; getValue(luastate,4,a4);
A5 a5; getValue(luastate,5,a5);
A6 a6; getValue(luastate,6,a6);
A7 a7; getValue(luastate,7,a7);
A8 a8; getValue(luastate,8,a8);
A9 a9; getValue(luastate,9,a9);
return pushValue( luastate, (thisptr->*funcptr)( a1, a2, a3, a4, a5, a6, a7, a8, a9 ) );
}
template <class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10> static int
callMethod( LuaState* luastate, T* thisptr, R (T::*funcptr)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) )
{
A1 a1; getValue(luastate,1,a1);
A2 a2; getValue(luastate,2,a2);
A3 a3; getValue(luastate,3,a3);
A4 a4; getValue(luastate,4,a4);
A5 a5; getValue(luastate,5,a5);
A6 a6; getValue(luastate,6,a6);
A7 a7; getValue(luastate,7,a7);
A8 a8; getValue(luastate,8,a8);
A9 a9; getValue(luastate,9,a9);
A10 a10; getValue(luastate,10,a10);
return pushValue( luastate, (thisptr->*funcptr)( a1, a2, a3, a4, a5, a6, a7, a8, a9, a10 ) );
}
};
template <> class ReturnValue<void>
{
public:
template <class T> static int
callMethod( LuaState* luastate, T* thisptr, void (T::*funcptr)() )
{
(thisptr->*funcptr)(); return 0;
}
template <class T, class A1> static int
callMethod( LuaState* luastate, T* thisptr, void (T::*funcptr)(A1) )
{
A1 a1; getValue(luastate,1,a1);
(thisptr->*funcptr)( a1 ); return 0;
}
template <class T, class A1, class A2> static int
callMethod( LuaState* luastate, T* thisptr, void (T::*funcptr)(A1,A2) )
{
A1 a1; getValue(luastate,1,a1);
A2 a2; getValue(luastate,2,a2);
(thisptr->*funcptr)( a1, a2 ); return 0;
}
template <class T, class A1, class A2, class A3> static int
callMethod( LuaState* luastate, T* thisptr, void (T::*funcptr)(A1,A2,A3) )
{
A1 a1; getValue(luastate,1,a1);
A2 a2; getValue(luastate,2,a2);
A3 a3; getValue(luastate,3,a3);
(thisptr->*funcptr)( a1, a2, a3 ); return 0;
}
template <class T, class A1, class A2, class A3, class A4> static int
callMethod( LuaState* luastate, T* thisptr, void (T::*funcptr)(A1,A2,A3,A4) )
{
A1 a1; getValue(luastate,1,a1);
A2 a2; getValue(luastate,2,a2);
A3 a3; getValue(luastate,3,a3);
A4 a4; getValue(luastate,4,a4);
(thisptr->*funcptr)( a1, a2, a3, a4 ); return 0;
}
template <class T, class A1, class A2, class A3, class A4, class A5> static int
callMethod( LuaState* luastate, T* thisptr, void (T::*funcptr)(A1,A2,A3,A4,A5) )
{
A1 a1; getValue(luastate,1,a1);
A2 a2; getValue(luastate,2,a2);
A3 a3; getValue(luastate,3,a3);
A4 a4; getValue(luastate,4,a4);
A5 a5; getValue(luastate,5,a5);
(thisptr->*funcptr)( a1, a2, a3, a4, a5 ); return 0;
}
template <class T, class A1, class A2, class A3, class A4, class A5, class A6> static int
callMethod( LuaState* luastate, T* thisptr, void (T::*funcptr)(A1,A2,A3,A4,A5,A6) )
{
A1 a1; getValue(luastate,1,a1);
A2 a2; getValue(luastate,2,a2);
A3 a3; getValue(luastate,3,a3);
A4 a4; getValue(luastate,4,a4);
A5 a5; getValue(luastate,5,a5);
A6 a6; getValue(luastate,6,a6);
(thisptr->*funcptr)( a1, a2, a3, a4, a5, a6 ); return 0;
}
template <class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7> static int
callMethod( LuaState* luastate, T* thisptr, void (T::*funcptr)(A1,A2,A3,A4,A5,A6,A7) )
{
A1 a1; getValue(luastate,1,a1);
A2 a2; getValue(luastate,2,a2);
A3 a3; getValue(luastate,3,a3);
A4 a4; getValue(luastate,4,a4);
A5 a5; getValue(luastate,5,a5);
A6 a6; getValue(luastate,6,a6);
A7 a7; getValue(luastate,7,a7);
(thisptr->*funcptr)( a1, a2, a3, a4, a5, a6, a7 ); return 0;
}
template <class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> static int
callMethod( LuaState* luastate, T* thisptr, void (T::*funcptr)(A1,A2,A3,A4,A5,A6,A7,A8) )
{
A1 a1; getValue(luastate,1,a1);
A2 a2; getValue(luastate,2,a2);
A3 a3; getValue(luastate,3,a3);
A4 a4; getValue(luastate,4,a4);
A5 a5; getValue(luastate,5,a5);
A6 a6; getValue(luastate,6,a6);
A7 a7; getValue(luastate,7,a7);
A8 a8; getValue(luastate,8,a8);
(thisptr->*funcptr)( a1, a2, a3, a4, a5, a6, a7, a8 ); return 0;
}
template <class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> static int
callMethod( LuaState* luastate, T* thisptr, void (T::*funcptr)(A1,A2,A3,A4,A5,A6,A7,A8,A9) )
{
A1 a1; getValue(luastate,1,a1);
A2 a2; getValue(luastate,2,a2);
A3 a3; getValue(luastate,3,a3);
A4 a4; getValue(luastate,4,a4);
A5 a5; getValue(luastate,5,a5);
A6 a6; getValue(luastate,6,a6);
A7 a7; getValue(luastate,7,a7);
A8 a8; getValue(luastate,8,a8);
A9 a9; getValue(luastate,9,a9);
(thisptr->*funcptr)( a1, a2, a3, a4, a5, a6, a7, a8, a9 ); return 0;
}
template <class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10> static int
callMethod( LuaState* luastate, T* thisptr, void (T::*funcptr)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -