2

有什么方法可以将 STL 迭代器返回到std::map(例如std::map<const std::string, int>)?

示例类的 Luabind 定义:

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 说"尝试使用未注册的类"。迭代std::maps 是不可能的吗?(文档说所有容器都有begin()并且end()可以工作......)

4

2 回答 2

3

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

于 2011-07-22T05:47:32.807 回答
2

也许“未注册的班级”是std::pair<const std::string, int>. 你可以尝试用 Luabind 注册它,然后看看它是否有效?

于 2011-08-14T14:34:57.330 回答