Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

x1ntt/lua4tinker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

20 Commits

Repository files navigation

简介

目前使用vscode在linux上开发,使用gcc编译器,目前clang也可,最终希望运行在vs2022上(cl编译器)

克隆项目后 尝试cmake即可,其中包含一些测试代码

因为还在开发,所以有时候可能编译不通过

目前实现的功能

  • 定义全局变量到lua4 和 获取全局变量 完整例子见test/luatest_global.cpp
lua4tinker::set(L, "int_val", int_val);
int int_val2 = lua4tinker::get<int>(L, "int_val2");
  • 双向全局函数调用 完整例子见 test/luatest_function.cpp
lua4tinker::def(L, "cpp_sum", sum); // lua4 调用 cpp 函数
lua4tinker::call<int>(L, "max", 1, 2); // cpp 调用 lua4 函数
  • 传递cpp对象到lua 完整例子见 test/luatest_object.cpp

    cpp侧定义对象和成员变量

    A a_object(2);
    lua4tinker::class_object<A>(L, "a_object", &a_object);
    lua4tinker::class_object_mem<A>(L, &a_object, "a_object", &A::_a, "_a");
    lua4tinker::class_object_mem<A>(L, &a_object, "a_object", &A::_str, "_str");
    lua4tinker::class_object_mem<A>(L, &a_object, "a_object", &A::_flt, "_flt");
    lua4tinker::class_object_func<A>(L, &a_object, "a_object", &A::sum, "sum");
    // 以下宏与上面代码等效
    // OBJECT_DEF(L, A, a_object);
    // OBJECT_MEM_DEF(L, A, a_object, _a);
    // OBJECT_MEM_DEF(L, A, a_object, _str);
    // OBJECT_MEM_DEF(L, A, a_object, _flt);
    // OBJECT_FUNC_DEF(L, A, a_object, sum);
    int int_val = 123;
    if (lua4tinker::call<int>(L, "call_by_cpp", lua4tinker::LuaClass("a_object"), int_val, string("Hello, Object!"), 233.233) != int_val*2) {
     return 1;
    }

    lua侧对成员变量进行修改和访问,并且调用cpp对象方法,同时传参

    function call_by_cpp(a_object, int_val, str_val, float_val)
     a_object['_a'] = int_val
     a_object['_str'] = str_val
     a_object['_flt'] = float_val
     a_object['_not_exist'] = 233
     print (a_object['_a'])
     print (a_object['_str'])
     print (a_object['_flt'])
     print ("a_object:sum: "..a_object:sum(int_val, float_val))
     return a_object['_a']+a_object['_a']
    end

Todo

  • 针对变量边界的检查
  • 增加对象定义宏

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

AltStyle によって変換されたページ (->オリジナル) /