diff options
author | chai <chaifix@163.com> | 2019-03-14 09:08:07 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2019-03-14 09:08:07 +0800 |
commit | 8d8c4ff1664625e7428d0d31cd798d9321680cb2 (patch) | |
tree | 67af1dad8483ba1c886ae1bd00b9c664ee245385 /Source/Samples/LuaxTest/main.cpp | |
parent | 6016ece202eef94ed76bd20d4f7879ccc71cc2e6 (diff) |
*luax
Diffstat (limited to 'Source/Samples/LuaxTest/main.cpp')
-rw-r--r-- | Source/Samples/LuaxTest/main.cpp | 69 |
1 files changed, 55 insertions, 14 deletions
diff --git a/Source/Samples/LuaxTest/main.cpp b/Source/Samples/LuaxTest/main.cpp index 8dc7281..fdcf29a 100644 --- a/Source/Samples/LuaxTest/main.cpp +++ b/Source/Samples/LuaxTest/main.cpp @@ -59,25 +59,28 @@ void School::RegisterLuaxClass(LuaxState& state) //---------------------------------------------------------------------------------------------------------------- -class Boy : public LuaxClass +class Boy : public LuaxClass<Boy> { public: - Boy(int age) : mAge(age) {} + Boy(int age, const char* name) : mAge(age), mName(name){} -private: + int mAge; + + const char* mName; - int mAge; +private: public: LUAX_DECL_FACTORY(SimBoy); // member methods - LUAX_DECL_METHOD(l_New); LUAX_DECL_METHOD(l_GetAge); + LUAX_DECL_METHOD(l_GetName); // class method + LUAX_DECL_METHOD(l_New); LUAX_DECL_METHOD(l_GetGender); }; @@ -87,8 +90,9 @@ int Boy::l_New(lua_State* L) LUAX_STATE(L); int age = state.GetValue(1, 0); + const char* name = state.GetValue(2, ""); - Boy* boy = new Boy(age); + Boy* boy = new Boy(age, name); boy->PushLuaUserdata(state); return 1; @@ -97,6 +101,19 @@ int Boy::l_New(lua_State* L) int Boy::l_GetAge(lua_State* L) { LUAX_SETUP(L, "U"); + + Boy* self = state.GetLuaUserdata<Boy>(1); + + state.Push(self->mAge); + + return 1; +} + +int Boy::l_GetName(lua_State* L) +{ + LUAX_SETUP(L, "U"); + Boy* self = state.GetLuaUserdata<Boy>(1); + state.Push(self->mName); return 1; } @@ -113,8 +130,9 @@ void Boy::RegisterLuaxClass(LuaxState& state) state.SetField(-1, "Gender", "Male"); // 101 luaL_Reg regTable[] = { - {"GetGender", l_GetGender}, - {NULL, NULL} + { "New", l_New }, + { "GetGender", l_GetGender }, + {NULL, NULL} }; state.Register(regTable); @@ -123,8 +141,9 @@ void Boy::RegisterLuaxClass(LuaxState& state) void Boy::RegisterLuaxInterface(LuaxState& state) { luaL_Reg regTable[] = { - {"New", l_New}, - {NULL, NULL} + { "GetAge", l_GetAge }, + { "GetName", l_GetName }, + {NULL, NULL} }; state.Register(regTable); @@ -132,6 +151,11 @@ void Boy::RegisterLuaxInterface(LuaxState& state) //---------------------------------------------------------------------------------------------------------------- +class Girl : public LuaxClass<Girl> +{ +}; + +//---------------------------------------------------------------------------------------------------------------- string script = R"( function main() local a = 19 @@ -144,7 +168,6 @@ function main() -- print(Asura.SimSchool.GetName()) print(Asura.SimBoy.Class) print(Asura.SimBoy.Gender) - print(Asura.SimBoy.GetGender()) print(Asura.SimBoy.GetClassName()) print(Asura.School.GetName()) print(Asura.School.Region) @@ -160,8 +183,27 @@ function main() end local kid = Kid.New(110, 12) kid:GetHeight() -]] -end + ]] + local kid = Asura.SimBoy.New(23, "Chai") + print(kid:GetAge()) + print(kid:GetName()) + kid.fruit = function() + return "apple" + end + print(kid.fruit()) + print(Asura.SimBoy.GetGender()) + Asura.SimBoy.Havefun = function() + return "Boys have some fun!" + end + print(Asura.SimBoy.Havefun()) + +-- + Asura.SimBoy.Foo = function() + return "SimBoy.Foo" + end + print(Asura.SimBoy.Foo()) + +end function err(msg) print(msg) end @@ -183,7 +225,6 @@ int main() lua_State* L = runtime.Open(); Luax::LuaxState& state = runtime[L].state; - LuaxRefTable& strong = runtime[L].strongRefTable; state.OpenLibs(); state.PushNamespace("Asura"); state.PushNamespace("author"); |