luastate.inl

来自「一个symbian 冒险游戏代码」· INL 代码 · 共 38 行

INL
38
字号
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 + =
减小字号Ctrl + -
显示快捷键?