Luabind: return_stl_iterator для std::map
Есть ли способ вернуть итератор 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 ответа
После просмотра исходного кода я обнаружил, что политика Luabind return_stl_iterator поддерживает только итераторы, которые напрямую ссылаются на требуемый тип данных. Итераторы для ассоциативных контейнеров не поддерживаются (first
а также second
никогда не доступны).
Возможно, "незарегистрированный класс" std::pair<const std::string, int>
, Можете ли вы попробовать зарегистрировать это в Luabind и посмотреть, сработает ли это тогда?