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 и посмотреть, сработает ли это тогда?

Другие вопросы по тегам