我在使用 luabind 将 stl::vector::iterator 返回到 lua 脚本时遇到了一个奇怪的问题。
下面是代码:
1)我创建了两个由 lua 脚本调用的函数:
std::vector<car*> get_car_list()
{
std::vector<car*>* vec = new std::vector<car*>();
vec->push_back(new car("I'm the 1st"));
vec->push_back(new car("I'm the 2nd"));
return *vec;
}
void output(const std::string& msg)
{
std::cout << "lua:" << msg << std::endl;
}
2)我将函数绑定到lua
luabind::module(L)
[
luabind::def("get_car_list", &get_car_list, luabind::return_stl_iterator)
];
luabind::module(L)
[
luabind::def("output", &output)
];
3)我做的脚本如下:
function test()
items = get_car_list();
for item in items do
output(item:get_name());
end
end
4)结果是:在输出窗口中,它只显示:
lua:I'm the 1st
该程序在 luabind/policy.hpp:754 中中断
template <>
struct default_converter<std::string>
: native_converter_base<std::string>
{
.....
void to(lua_State* L, std::string const& value)
{
lua_pushlstring(L, value.data(), value.size()); // !!Break Here with Error EXC_BAD_ACCESS
}
};
我想显示 std::vector 中的所有元素,但它只显示第一个元素并崩溃。
非常感谢你!:)
杰森