Luabind:std::map 的 return_stl_iterator

发布于 2024-11-25 22:39:03 字数 558 浏览 3 评论 0原文

有没有办法将STL迭代器返回到std::map(例如std::map)?

示例类的 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::map 是不可能的吗? (文档说所有具有 begin()end() 的容器都可以工作...)

Is there any way to return an STL iterator to a std::map (e.g. std::map<const std::string, int>)?

Luabind definition for an example class:

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

GetItems() returns a const reference to a std::map container.

When accessing it in Lua like this:

for item in some_class.items do
  ...
end

Luabind throws a std::runtime_error saying "Trying to use unregistered class". Is iterating over std::maps not possible? (the documentation says that all containers having begin() and end() work...)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

再可℃爱ぅ一点好了 2024-12-02 22:39:03

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

After browsing the source code I discovered that the Luabind return_stl_iterator policy only supports iterators that reference the wanted datatype directly. Iterators for associative containers are not supported (first and second are never accessed).

故人如初 2024-12-02 22:39:03

也许“未注册的类”是 std::pair。你可以尝试用 Luabind 注册一下看看它是否有效吗?

Perhaps the "unregistered class" is std::pair<const std::string, int>. Can you try registering that with Luabind and see if it works then?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文