Luabind: return_stl_iterator for std::map

Luabind: return_stl_iterator for std::map

本文关键字:std map for stl return Luabind iterator      更新时间:2023-10-16

是否有任何方法返回STL迭代器到std::map(例如std::map<const std::string, int>)?

示例类的luabbind定义:

class_<SomeClass>( "SomeClass" )
  .property( "items", &SomeClass::GetItems, return_stl_iterator )

GetItems()返回一个指向std::map容器的const引用。

在Lua中像这样访问它:

for item in some_class.items do
  ...
end

Luabind抛出std::runtime_error,提示"Trying to use unregistered class"。迭代std::map是不可能的吗?(文档说所有的容器有begin()end()工作…)

浏览源代码后,我发现Luabind的return_stl_iterator策略只支持直接引用所需数据类型的迭代器。不支持关联容器的迭代器(不能访问firstsecond)。

可能"未注册类"是std::pair<const std::string, int>。你能试着在Luabind上注册一下,看看它是否有效吗?