diff --git a/include/Nazara/Lua/LuaClass.inl b/include/Nazara/Lua/LuaClass.inl index 79f92c385..5ff49defe 100644 --- a/include/Nazara/Lua/LuaClass.inl +++ b/include/Nazara/Lua/LuaClass.inl @@ -15,15 +15,6 @@ namespace Nz { m_info->name = name; } - /* - template - void LuaClass::Inherit(LuaClass

& parent) - { - static_assert(std::is_base_of::value, "P must be a base of T"); - - m_info->parentInfo = parent.m_info; - } - */ template template @@ -288,10 +279,7 @@ namespace Nz return 0; // Normalement jamais exécuté (l'erreur provoquant une exception) } - T** ud = static_cast(lua.PushUserdata(sizeof(T*))); - *ud = instance; - lua.SetMetatable(info->name); - + lua.PushInstance(info->name.GetConstBuffer(), instance); return 1; } diff --git a/include/Nazara/Lua/LuaInstance.hpp b/include/Nazara/Lua/LuaInstance.hpp index b194bf11f..504a79254 100644 --- a/include/Nazara/Lua/LuaInstance.hpp +++ b/include/Nazara/Lua/LuaInstance.hpp @@ -117,6 +117,8 @@ namespace Nz void PushCFunction(LuaCFunction func, unsigned int upvalueCount = 0); void PushFunction(LuaFunction func); template void PushFunction(R(*func)(Args...), DefArgs... defArgs); + template void PushInstance(const char* tname, T* instance); + template void PushInstance(const char* tname, Args&&... args); void PushInteger(long long value); void PushLightUserdata(void* value); void PushMetatable(const char* str); diff --git a/include/Nazara/Lua/LuaInstance.inl b/include/Nazara/Lua/LuaInstance.inl index 20f568f64..bd57b2308 100644 --- a/include/Nazara/Lua/LuaInstance.inl +++ b/include/Nazara/Lua/LuaInstance.inl @@ -404,4 +404,18 @@ namespace Nz return handler.Invoke(func); }); } + + template + void LuaInstance::PushInstance(const char* tname, T* instance) + { + T** userdata = static_cast(PushUserdata(sizeof(T*))); + *userdata = instance; + SetMetatable(tname); + } + + template + void LuaInstance::PushInstance(const char* tname, Args&&... args) + { + PushInstance(tname, new T(std::forward(args)...)); + } }