我想将派生自纯虚拟 C++ 类的类的 Lua 对象传递给需要纯虚拟类的 C++ 对象的函数。我该怎么做?
我是 lua 和 luabind 的新手,请耐心等待。
在 C++ 中:
struct A {
virtual void foo() = 0;
};
void do_something(A* a) {
a->foo();
}
在 Lua 中:
class 'MyA' (A)
....
function MyA:foo()
print('hi')
end
再次在 C++ 中:
... // somehow create an instance of MyA class and named myA
// How?
// Maybe the result of a call to "MyA()"?
do_something(myA);
最佳答案
您必须创建一个实现纯虚函数的 C++ 类,然后调用 Lua 代码。实现太复杂了,不能只放在这里。
基本伪代码:
// C++
struct LuaA : public A
{
LuaA(const std::string &luacode)
: myLuaHandler(luacode)
{
}
virtual void foo()
{
myLuaHandler.call("MyA:foo()");
}
}
这个例子是非常高层次的,但它是为了表明你想做的事情是非常重要的。这是您实际想要向您的 Lua 代码公开的新“LuaA”。
一般来说我更喜欢使用SWIG在包装我的 C++ 以接触 Lua 和其他脚本语言时。 SWIG 确实支持您感兴趣的这种虚方法重载(在 SWIG 术语中称为“directors”),但是,应该注意的是 Lua/SWIG 不支持 directors。 Java、C#、Ruby、Perl 和 Python 在 SWIG 中都有导向器支持。我不确定 Lua 不支持它的确切原因。
有可能,因为 Lua 不支持继承,所以您想要实现的确切语义在您提议的方式中根本不可能。
也许其他人对 Lua 方面的事情有更好的答案?
关于c++ - 函数需要抽象类型 A 的 C++ 对象。如何将 A 子类的 Lua 对象传递给它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/803748/