Luabind: return_stl_iterator для std :: map - PullRequest
2 голосов
/ 21 июля 2011

Есть ли способ вернуть итератор STL в std::map (например, std::map<const std::string, int>)?

Определение Luabind для примера класса:

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

GetItems() возвращаетконстантная ссылка на контейнер std::map.

При доступе к нему в Lua, например:

for item in some_class.items do
  ...
end

Luabind выдает std :: runtime_error, говоря "Попытка использовать незарегистрированный класс«.Итерирование по std::map невозможно?(в документации сказано, что все контейнеры, имеющие begin() и end(), работают ...)

Ответы [ 2 ]

2 голосов
/ 14 августа 2011

Возможно, "незарегистрированный класс" - std::pair<const std::string, int>. Можете ли вы попробовать зарегистрировать это в Luabind и посмотреть, сработает ли это тогда?

2 голосов
/ 22 июля 2011

После просмотра исходного кода я обнаружил, что политика Luabind return_stl_iterator поддерживает только итераторы, которые напрямую ссылаются на требуемый тип данных. Итераторы для ассоциативных контейнеров не поддерживаются (first и second никогда не доступны).

...