Как правильно обернуть std :: vector SWIG для Python?Проблемы с std :: size_t

Я пытаюсь заставить ---- +: = 0 =: + ---- работать с SWIG.Мне нужно предоставить интерфейс Python для библиотеки C ++.---- +: = 1 =: + ---- s примитивных типов и объектов работают нормально, но есть проблема с ---- +: = 2 =: + ---- .Я представляю MCVE на github здесь .Главная проблемаВ основном проблема в том, что ---- +: = 3 =: + ---- не распознается, а ---- +: = 4 =: + ---- обрабатывается как ---- +: = 5=: + ---- .При попытке указать шаблон получаю следующее.Использование ---- +: = 6 =: + ---- дает:Минимальный примерПример класса c ++Следующего класса достаточно, чтобы показать нужную мне функциональность.---- +: = 8 =: + ---- включен, чтобы показать предполагаемое поведение.class_vec_std_size.hppРазличные попытки интерфейсаa_swig_vec_std_size.iВыводЭто основной наивный подход.Указатели бесполезны в python, и есть сообщения об утечке памяти, которые мы не можем раскрыть пользователям интерфейса.b_swig_vec_std_size.iВыводИспользуя правильный "std_vector.i", SWIG знает больше о векторе и распределителях, но, тем не менее, эти указатели бесполезны для клиентского кода в Python, и есть сообщения об ошибках утечки памяти.c_swig_vec_std_size.iЭтот интерфейс использует правильные директивы ---- +: = 14 =: + ----, подобные этому ответу .Здесь SWIG не понимает ---- +: = 15 =: + ---- как аргумент шаблона.ВыводТеперь ---- +: = 18 =: + ---- работает правильно, но SWIG ---- +: = 19 =: + ---- (без ---- +: = 20 =: +---- ) не работает.Некоторое интернет-копаниеЯ нашел несколько сообщений, которые предлагают некоторые подсказки.Чувствуя это, я нашел сообщение 2006 года с той же проблемойStd :: vector :: size_type, завернутый как указатель, а не целочисленная ссылка, содержал некоторую полезную информацию, но проблема не совсем такая.Я нашел этот primitives.i из проекта magnum.fe, но думающие мечтательно и импортирующие primitives.i не работал для меня.После этого я попытался реализовать ---- +: = 21 =: + ---- и ---- +: = 22 =: + ---- аналогично их подходу, но безуспешно.скрученный вручную std_size_t.iЭто было импортировано в d_swig_vec_std_size.i .но он не компилируется.Вот это я понял.makefileВерсии программыИспользование более новой версии swig (swig-3.0.10) дает для меня тот же результат.РезюмеЯ подозреваю, что ответ может быть где-то вроде интерфейса d , но мне пока не повезло.Может возникнуть проблема с тем, как ---- +: = 28 =: + ---- реализуется по-разному в зависимости от архитектуры, вместо того, чтобы иметь фиксированный размер.В любом случае, я ожидаю, что SWIG сможет с этим справиться.Я что-то упускаю?Я хотел бы найти решение, которое не предполагает внесения изменений в библиотеку C ++ (например, инкапсуляцию std :: size_t в ---- +: = 29 =: + ---- или использование ---- +:= 30 =: + ---- вместо этого).Пробуем решение Йенса МонкаЯ получаю это:
7 голосов | спросил pbible 30 J000000Saturday16 2016, 16:04:31

0 ответов


Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132