Lua/LuaInstance: Add PushInstance

Former-commit-id: 0e65124d5920a1b5ea3c644e496ae58ddee1cd8e
This commit is contained in:
Lynix 2015-12-13 04:40:50 +01:00
parent 83bd028e8f
commit 2c79e5f4e0
3 changed files with 17 additions and 13 deletions

View File

@ -15,15 +15,6 @@ namespace Nz
{
m_info->name = name;
}
/*
template<class T>
void LuaClass<T>::Inherit(LuaClass<P>& parent)
{
static_assert(std::is_base_of<P, T>::value, "P must be a base of T");
m_info->parentInfo = parent.m_info;
}
*/
template<class T>
template<class P>
@ -288,10 +279,7 @@ namespace Nz
return 0; // Normalement jamais exécuté (l'erreur provoquant une exception)
}
T** ud = static_cast<T**>(lua.PushUserdata(sizeof(T*)));
*ud = instance;
lua.SetMetatable(info->name);
lua.PushInstance(info->name.GetConstBuffer(), instance);
return 1;
}

View File

@ -117,6 +117,8 @@ namespace Nz
void PushCFunction(LuaCFunction func, unsigned int upvalueCount = 0);
void PushFunction(LuaFunction func);
template<typename R, typename... Args, typename... DefArgs> void PushFunction(R(*func)(Args...), DefArgs... defArgs);
template<typename T> void PushInstance(const char* tname, T* instance);
template<typename T, typename... Args> void PushInstance(const char* tname, Args&&... args);
void PushInteger(long long value);
void PushLightUserdata(void* value);
void PushMetatable(const char* str);

View File

@ -404,4 +404,18 @@ namespace Nz
return handler.Invoke(func);
});
}
template<typename T>
void LuaInstance::PushInstance(const char* tname, T* instance)
{
T** userdata = static_cast<T**>(PushUserdata(sizeof(T*)));
*userdata = instance;
SetMetatable(tname);
}
template<typename T, typename... Args>
void LuaInstance::PushInstance(const char* tname, Args&&... args)
{
PushInstance(tname, new T(std::forward<Args>(args)...));
}
}