0

我正在尝试用 STL Queue 类替换用 Lua 编写的队列类的现有实现。我不确定为什么会失败,或者如何解决它。下面是一些显示相同行为的示例代码以及错误输出。提前致谢!

#include <luabind/luabind.hpp>
#include <队列>

结构 XYZ_T
{
    短 x, y, z;
};

typedef std::queue<XYZ_T> XYZ_QUEUE_T;

extern "C" int init(lua_State *L)
{
    使用命名空间 luabind;

    打开(L);

    模组(L)
    [
        class_<XZY_T>("XYZ_T")
            .def(构造函数<>())
            .def_readwrite("x", &XYZ_T::x)
            .def_readwrite("y", &XYZ_T::y)
            .def_readwrite("z", &XYZ_T::z),

        class_<XYZ_QUEUE_T>("XYZ_QUEUE_T")
            .def(构造函数<>())
            .def("推", &XYZ_QUEUE_T::推)
            .def("pop", &XYZ_QUEUE_T::pop)
            .def("前", &XYZ_QUEUE_T::front)
            .def("后退", &XYZ_QUEUE_T::back)
            .def("空", &XYZ_QUEUE_T::empty)
            .def("大小", &XYZ_QUEUE_T::size)
    ];
}


和 gcc 输出:

g++ -o test_luabind.os -c -fPIC -Iinclude -I$VALID_INCLUDE_DIR /packages/build_env/include test_luabind.cpp
test_luabind.cpp:在函数“int init(lua_State*)”中:
test_luabind.cpp:27:错误:没有匹配的函数调用`
   luabind::class_<XYZ_QUEUE_T, luabind::detail::unspecified,
   luabind::detail::unspecified, luabind::detail::unspecified>::def(const
   char[6], <未知类型>)'
test_luabind.cpp:32:错误:在 `(' 标记之前解析错误
4

3 回答 3

4

最有可能的是,您的队列实现中有一个重载的函数。因此,当您获取地址时,编译器不知道该怎么做,因为您可能指的是任何重载函数。

于 2011-07-06T23:35:53.487 回答
2

正如 DeadMG 指出的那样,在重载函数的情况下,您必须告诉编译器选择哪个版本,例如const版本:

typedef const XYZ_QUEUE_T::value_type& (XYZ_QUEUE_T::*ConstRefConstType)() const;

class_<XYZ_QUEUE_T>("XYZ_QUEUE_T")
    // ...
    .def("front", (ConstRefConstType)&XYZ_QUEUE_T::front)
    .def("back" , (ConstRefConstType)&XYZ_QUEUE_T::back)
    // ...

luabind 文档包括一个这样的例子

于 2011-07-07T09:01:55.320 回答
0

这个:

class_("XYZ_QUEUE_T")

应该:

class_<XYZ_QUEUE_T>("XYZ_QUEUE_T")

字符串是 Lua 看到的类型名,而模板参数是您正在使用的 C++ 类型。

哦,如果您不公开队列存储的对象,那么将队列公开给 Lua 并没有什么好处。

于 2011-07-06T22:58:05.243 回答