从 C++ 应用程序自动构建 Lua API

我有一个 C++ 应用程序,我想为该应用程序设计和提供 Lua API,有什么工具可以帮助我实现吗?也许有一种方法可以标记一些方法并将它们暴露给 Lua API 层?对于其他语言,我已经见过可以在解析代码后生成 API 的工具,是否有类似于 Lua 的工具?

点赞
用户1929432
用户1929432

查看SWIG。根据您的需求和您的 C/C++ 头文件的“清晰程度”,您可以将整个 .h 文件提供给 SWIG 或选择要导出到 Lua 的函数/类(就像在这个基本示例中一样):

%module example
%{
#include "example.h"
%}
int gcd(int x, int y);
extern double Foo;
2013-01-03 13:20:23
用户1130744
用户1130744

我非常赞赏 LuaBridge 的轻量级方法,只需要在应用程序中包含一个(一个!)头文件。

https://github.com/vinniefalco/LuaBridge

https://github.com/vinniefalco/LuaBridgeDemo

/** 为该类声明 LUA 绑定
 *
 * @param global_lua
 */
void c_entity::lua_bind(lua_State* L) {
    getGlobalNamespace(L)
        .beginClass<c_entity>("c_entity")
            .addFunction("getSpeed",&c_entity::get_linear_speed)
            .addFunction("getName",&c_entity::get_name)
            .addFunction("getMaxSpeed",&c_entity::get_max_linear_speed)
            .addFunction("getAcceleration",&c_entity::get_max_linear_acceleration)
            .addFunction("getHull",&c_entity::get_hull)
            .addFunction("getArmor",&c_entity::get_armor)
            .addFunction("getShield",&c_entity::get_shield)
            .addCFunction("getStatus",&c_entity::getStatus)
            .addFunction("logTrace",&c_entity::log_trace)
            .addFunction("logInfo",&c_entity::log_info)
            .addFunction("logDebug",&c_entity::log_debug)
            .addFunction("logError",&c_entity::log_error)
        .endClass();
}
2013-01-04 10:04:59