⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 luaobject.inl

📁 这个是symbian下的一个蛮庞大的3D游戏源代码!对于学习3D开发的人有很大的帮助!
💻 INL
📖 第 1 页 / 共 2 页
字号:
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 + -