C++ 阅读C++#定义为Lua状态
对于我正在进行的一个项目,我们有大约2k个定义,用于识别游戏中的不同项目,如下所示:C++ 阅读C++#定义为Lua状态,c++,lua,c-preprocessor,C++,Lua,C Preprocessor,对于我正在进行的一个项目,我们有大约2k个定义,用于识别游戏中的不同项目,如下所示: #define ITEMID_WEAPON_SWORD_PEARL 41 #define ITEMID_WEAPON_SWORD_CYCLONE 42 #define ITEMID_WEAPON_SWORD_INVADERS 43 #define ITEMID_WEAPON_SWORD_SWITCH
#define ITEMID_WEAPON_SWORD_PEARL 41
#define ITEMID_WEAPON_SWORD_CYCLONE 42
#define ITEMID_WEAPON_SWORD_INVADERS 43
#define ITEMID_WEAPON_SWORD_SWITCH 44
#define ITEMID_WEAPON_SWORD_MULTIBLADE 45
#define ITEMID_WEAPON_SWORD_KATANA 46
C=[[
#define ITEMID_WEAPON_SWORD_PEARL 41
#define ITEMID_WEAPON_SWORD_CYCLONE 42
#define ITEMID_WEAPON_SWORD_INVADERS 43
#define ITEMID_WEAPON_SWORD_SWITCH 44
#define ITEMID_WEAPON_SWORD_MULTIBLADE 45
#define ITEMID_WEAPON_SWORD_KATANA 46
]]
for k,v in C:gmatch("#define%s+(%S+)%s+(%d+)") do
_G[k]=tonumber(v)
end
等等。请注意,这不是出于选择,它是由以前的开发人员设置的一个系统,在这一点上需要付出太多的努力才能实现
我被要求基本上制作一个工艺系统,希望我能使它干净有序,我想使用Lua。我的计划基本上是做如下事情:
Cooking =
{
["Sandvich"] =
{
{ --In
{ITEMID_COOKING_BREAD, 2, -1},
{ITEMID_COOKING_MEAT, 1, -1},
{ITEMID_COOKING_TOMATO, 1, -1},
},
{ --Out
{ITEMID_COOKING_SANDVICH, 1}
}
}
}
不过,据我所知,我能看到的唯一问题是Lua无法以本机方式读取C/C++#定义。(也许可以?那太好了。)
我想知道在这些定义中是否有任何库、模块或东西可以用来阅读,或者我是否应该使用另一种方法来代替Lua?无可否认,我对它相对不熟练,但从一个起点出发,我应该能够轻松地启动并运行一些东西。您可以尝试使用解析这些标题。我不确定您的确切需求是什么 如果您只需要用相应的数字替换这些标识符,那么幸运的是,您可以通过C预处理器(
cpp
或gcc-E
)运行Lua文件
如果要使用这些名称和值定义Lua变量,可以使用如下代码解析Lua中的C文件:
#define ITEMID_WEAPON_SWORD_PEARL 41
#define ITEMID_WEAPON_SWORD_CYCLONE 42
#define ITEMID_WEAPON_SWORD_INVADERS 43
#define ITEMID_WEAPON_SWORD_SWITCH 44
#define ITEMID_WEAPON_SWORD_MULTIBLADE 45
#define ITEMID_WEAPON_SWORD_KATANA 46
C=[[
#define ITEMID_WEAPON_SWORD_PEARL 41
#define ITEMID_WEAPON_SWORD_CYCLONE 42
#define ITEMID_WEAPON_SWORD_INVADERS 43
#define ITEMID_WEAPON_SWORD_SWITCH 44
#define ITEMID_WEAPON_SWORD_MULTIBLADE 45
#define ITEMID_WEAPON_SWORD_KATANA 46
]]
for k,v in C:gmatch("#define%s+(%S+)%s+(%d+)") do
_G[k]=tonumber(v)
end
如果不想使变量成为全局变量,请使用不同的表,而不是\u G
上面的代码只是一个测试。你可能想一次一行地读取你的C文件或者所有的东西,然后做匹配。< /P>我不在追随这个问题,你的LUA程序和C++头不匹配。
烹饪
,桑德维奇
,以及表中的2
,-1
等数字从何而来?你能提供一个匹配的例子吗?我实际上是在和我的老板谈论通过预处理器运行它。虽然我没有考虑过使用C的预处理器,但我觉得有点傻。我最担心的是速度,如果不需要的话,我不想再为一件事增加两三秒的启动时间。C预处理器速度很快。解析20Kline不需要几秒钟,只是其中的一小部分。你真的应该离线做。