Python C API поддерживает функциональность уровня C (не уровня C ++ один) - в основном, вы можете легко представить Python вещи, которые можно поместить в блок extern C
(который не включает std::map
& c) -- для других вещей, вам нужно немного больше работы.Характер этой работы зависит от того, что вы используете, чтобы обернуть свой код C ++ для использования на Python - есть много вариантов, включая простой C API, SWIG, SIP, Boost Python, Cython, ...
В голом C API (который, как я полагаю, используется вами, судя по вашим вопросам и тегам), я бы порекомендовал создать пользовательский тип объекта - возможно, в наши дни, один подкласс collection.Mapping (MutableMapping
если изменяемый, конечно), как вы это делали бы при реализации отображения в Python - и реализации Структуры объектов отображения плюс необходимые биты общего структура типа , например, tp_iter
и tp_iternext
слоты.
Конечно, ключевая идея заключается в том, что вы реализуете установку и получение элементов, а также итерацию, просто делегировав ихвыбрал std::map
и выполнил необходимое преобразование типов и низкоуровневое переключение (выделение объектов, подсчет ссылок) - последнее является частью высокоуровневых структур для расширения Python, сохраняя yПо сути, вам не нужно этого делать, но базовая архитектура «перенос и делегирование» не сильно изменится.