Ошибка аргумента распределителя векторов при использовании сгенерированной SWIG библиотеки python

Я использовал SWIG и создал библиотеку Python из кода C++ и обнаружил следующую ошибку:

TypeError: в методе 'new_SpikeGeneratorFromVector', аргумент 1 типа 'std::vector‹ int, std::allocator‹ int > >'

Я включил файл интерфейса std_vector.i и stl.i и еще несколько, которые показались мне необходимыми. Когда я передаю целочисленный список функции, я получаю указанную выше ошибку.

Любая помощь приветствуется.


person CodeNinja    schedule 24.09.2017    source источник
comment
Прочтите, как создать минимально воспроизводимый пример, а затем покажите код для воспроизведения проблемы. Я предполагаю, что вы не использовали %template.   -  person Mark Tolonen    schedule 25.09.2017
comment
@MarkTolonen Я не мог опубликовать здесь всю свою проблему из-за нескольких проблем с конфиденциальностью, но я должен был быть более конкретным, извините за это. Однако проблема действительно заключалась в использовании шаблона, как вы предложили. Теперь он работает так, как ожидалось. Спасибо!   -  person CodeNinja    schedule 25.09.2017


Ответы (1)


Это может помочь:

/* File : example.i */

%module example

%{
#include "example.h"
%}

%include "std_vector.i"
namespace std {
    %template(IntVector)    vector<int>;
}

%include "example.h"

/*example.h*/
void my_func(std::vector<int> v) 
{
    for (int i=0; i<v.size(; i++))
        std::cout<<v[i]<<"\n";
}

/*in runme.py*/

import example
# call with a python list:
print example.my_func([1, 2, 3, 4])
#call with a python tuple:
print example.my_func((1, 2, 3, 4))
# ... or a wrapped std::vector<int>

v = example.IntVector(4)
for i in range(len(v)):
    v[i] = i + 1
print example.my_func(v)
person Abolfazl    schedule 05.10.2017