c++ - 函数需要抽象类型 A 的 C++ 对象。如何将 A 子类的 Lua 对象传递给它?

标签 c++ lua binding

我想将派生自纯虚拟 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/

相关文章:

C++从派生类转换为具有不同模板编号的基类

c++ - 在c++中基于范围的for循环中使用引用作为控制变量

java - Luaj:如何导入或需要一个 Lua 函数库

c# - 引用未编译的 c# 类

c# - WPF View-ModelView 绑定(bind)需要帮助请

c++ - 在 C 中的另一个函数的输入中定义一个函数

c++ - 在C++中将字符串输入到动态分配的char内存中

lua - Lua 中的析构函数?

lua - Redis LUA脚本条件取错返回语句

java 类属性绑定(bind)到 swing 组件