Luabind - 从脚本返回userdata

经过一番摸索,我决定尝试使用 Luabind。目前我正在尝试弄清楚一些东西,但我最大的问题是返回由 Lua 脚本创建的 userdata(class)。这是我正在使用的示例:

class testclass
{
public:
   testclass(const std::string& s) : m_string(s) {}
   void print_string() { std::cout << m_string << "\n"; }

private:
   std::string m_string;
};

以下是我使用 Luabind 在 Lua 中注册类的方式:

module(L)
[
   class_<testclass>("testclass")
     .def(constructor<const std::string &>())
     .def("print_string", &testclass::print_string)
];

以下是 Lua 脚本的内容:

a = testclass('Class created by Lua')
return a

在 Lua 中对 'a' 调用 print_string() 完全没有问题。但是,在然后,当我试图从 Lua 栈中检索 'a' 并在我的 C++ 程序中使用它时,我不知所措。我想做的是:

testclass * tmp = (testclass*)lua_touserdata(lua_state, -1);
tmp->print_string();

显然,print_string() 正在被调用,因为我得到了一个换行符作为输出,但是,我希望tmp->print_string() 的输出是 "Class created by Lua"。如何正确检索从脚本返回的 userdata(class)?

点赞