Как я могу передать map <string, string> в py с помощью API? - PullRequest
0 голосов
/ 10 июля 2010

C / C ++ может использовать Python API для загрузки py.

Но поддерживается только простой тип.

Как я могу передать map в py, чтобы он был диктом API?

Или какие методы лучше?

Ответы [ 2 ]

1 голос
/ 10 июля 2010

Используйте SWIG , который имеет некоторые готовые шаблоны для различных типов STL. См., Например, .

0 голосов
/ 10 июля 2010

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По сути, вам не нужно этого делать, но базовая архитектура «перенос и делегирование» не сильно изменится.

...