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

📄 luastate.inl

📁 这个是symbian下的一个蛮庞大的3D游戏源代码!对于学习3D开发的人有很大的帮助!
💻 INL
字号:
class LuaFunctor
{
public:
	void*	obj;
	char	func[8];
};

template <typename T> class LuaStateMethodDispatcher
{
public:
	typedef int (T::*LuaStateMethod_t)( LuaState* );

	static int dispatch( lua_State* impl )
	{
		LuaState* luastate;
		LuaFunctor lf;
		LuaState::getDispatchData( impl, &luastate, &lf );
		LuaStateMethod_t func = *reinterpret_cast<LuaStateMethod_t*>(lf.func);
		return (static_cast<T*>(lf.obj)->*func)( luastate );
	}
};

template <class T> void LuaState::pushMethodClosure( T* obj, int (T::*func)(LuaState*) )
{
	LuaFunctor lf;
	assert( sizeof(func) <= sizeof(lf.func) );
	lf.obj = obj;
	for ( int i = 0 ; i < int(sizeof(func)) ; ++i )
		lf.func[i] = reinterpret_cast<const char*>(&func)[i];

	// store data as light user data values
	void* const* data = reinterpret_cast<void* const*>(&lf); 
	const int datasize = int(sizeof(LuaFunctor)/sizeof(void*));
	for ( int i = 0 ; i < datasize ; ++i )
		pushLightUserData( data[i] );
	pushCClosure( LuaStateMethodDispatcher<T>::dispatch, datasize );
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -