gpt4 book ai didi

c++ - 调用 luabind 派生成员作为协程

转载 作者:太空宇宙 更新时间:2023-11-04 12:18:21 25 4
gpt4 key购买 nike

luabind 文档说要从 C++ 调用 Lua 派生的虚拟成员,您可以创建一个派生自 luabind::wrap_base 的包装类,然后像这样调用该函数:

class BaseWrapper : public Base, public luabind::wrap_base
{
public:
virtual void foo()
{
call<void>("foo");
}
};

到目前为止一切顺利 - 我有这么多工作要做。

但是我如何实现 BaseWrapper::foo() 来调用重写的 foo(在 Lua 端)作为协程(使用 resume_function) 而不是直接用 call 调用它?

这是处理非成员函数的方式:

luabind::object func = luabind::globals(L)["bar"];
luabind::resume_function<void>(func);

我想我需要知道的是如何为 foo 获取 func(由 Lua 派生类实现),然后是我现有的 resume_function 逻辑应该按原样工作。

最佳答案

所以我找到了这个问题的答案。似乎最简单的解决方案是在构造对象时从 Lua 传递 self,然后从其表中查找函数:

在 C++ 方面:

BaseWrapper::BaseWrapper(luabind::object self) : _self(self)
{ }

virtual void BaseWrapper::foo()
{
luabind::object func = _self["foo"];

/* now put func in coroutine scheduler queue and when appropriate call:

luabind::resume_function<void>(func, _self);
*/
}

在 Lua 中:

class 'Derived' (Base)
function Derived:__init()
Base.__init(self, self) -- the second self is param to BaseWrapper()
end

function Derived:foo()
-- here is the target function
end
end

关于c++ - 调用 luabind 派生成员作为协程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6447714/

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