gpt4 book ai didi

c++ - 这个脚本会导致很多很多关闭吗?如果是,有什么替代方案?

转载 作者:行者123 更新时间:2023-11-28 03:48:29 25 4
gpt4 key购买 nike

我想在 Lua 中实现一个 GUI 消息处理系统,目前它是这样工作的:

在 c++ 代码中,windows 有窗口过程,就像它们在 Windows API 中一样,我也试图在 Lua 中依靠它。

所以我的窗口带有一个 luabind::object 指向一个像这样的表

local action = {
[on_uimsg.MOUSEMOVE] = function (ele, a,b,c)return on_mousemove(b,c) end,
[on_uimsg.MOUSEDOWN] = function (ele, a,b,c) return on_mousedown(ele,b) end,
[on_uimsg.LEAVE] = function (ele, a,b,c) return on_mouseleave(b,c) end,

}

表格的关键是一个 GUI 消息。 Ele 是窗口句柄,a 又是消息,b 和 c 是参数。

local function on_mousemove(b,c)
ConsoleOut2("mousemove %i %i",b,c);
return 0;
end;

local function on_command(b,c)
ConsoleOut2("mousecmd %i %i",b,c);
return 1;
end;

是一些示例函数。

他们像这样绑定(bind)到对象:

parms.pos_x = 620;
parms.pos_y = 300;
parms.width = 100;
parms.height = 100;
parms.parent = DESKTOP;
parms.name = "Test";
parms.skin = "Default_outline";
parms.class = "BasicStaticText";
local window = hud:addWindow(parms,action);

这一切都在同一个脚本文件中,(据我所知)在我加载它时只执行一次。因此,首先构建表,然后在表上绑定(bind)到 luabind::::object 。然后在 C++ 中调用此对象,如下所示:

if (luabind::type(o)==LUA_TFUNCTION)
{
luabind::call_function<int>(o,handle,a,b,c);
}
else if (luabind::type(o)==LUA_TTABLE)
{
luabind::object call = o[a];

if (luabind::type(call)==LUA_TFUNCTION)
{
luabind::call_function<int>(call,handle,a,b,c);
}
}

因此,每当触发一条消息时,该表都会被调用,我猜它每次都会返回一个函数。我是这样假设的,因为即使我只加载脚本文件一次,当我调试脚本并在其中放置一个断点时,当调用操作对象时断点就会命中。

这是处理事情的好方法吗?

最佳答案

我假设您的问题是这是否会在您每次访问表时分配一个新函数。答案是否定的。

记住:Lua 中的普通函数定义只是未命名函数创建的特例。以下是相同的:

function SomeName() end

SomeName = function() end

该函数是在最初执行Lua源文件时创建的。正如你使用的表只被创建一次:在最初执行 Lua 源文件时。如果您多次执行 Lua 源文件,那么该表及其内容将被创建多次。

是的,你的代码里面会有很多功能。但这有什么问题呢?除非你不断地创建函数或做一些同样令人厌恶的事情,否则没有“太多”这样的事情。 Lua 恰恰没有 switch 语句,因为Lua 代码通常以这种方式做事。

简而言之:这对 Lua 来说是完全正常的。

关于c++ - 这个脚本会导致很多很多关闭吗?如果是,有什么替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6560127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com