Как использовать список Python для назначения std :: vector в C ++, используя SWIG?

У меня есть простой класс C ++, который содержит член std :: vector и функцию-член, которая принимает std :: vector в качестве аргумента, который я заключаю в SWIG и вызываю из Python. Пример кода приведен ниже.

После компиляции я вхожу в Python и делаю:

import test
t = test.Test()
a = [1, 2, 3]
b = t.times2(a) # works fine
t.data = a # fails!

Я получаю сообщение об ошибке:

TypeError: in method 'Test_data_set', argument 2 of type 'std::vector< double,std::allocator< double > > *'

Я знаю, что я могу просто сделать:

t.data = test.VectorDouble([1,2,3])

Но я хотел бы знать, как просто использовать список Python непосредственно в задании, или хотя бы понять, почему он не работает.

Вот пример кода.

test.i:

%module test

%include "std_vector.i"

namespace std {
    %template(VectorDouble) vector<double>;
};

%{
#include "test.hh"
%}

%include "test.hh"

test.hh:

#include <vector>

class Test {
    public:
        std::vector<double> data;
        std::vector<double> times2(std::vector<double>);
};

test.cc:

#include "test.hh"

std::vector<double>
Test::times2(
    std::vector<double> a)
{
    for(int i = 0; i < a.size(); ++i) {
        a[i] *= 2.0;
    }
    return a;
}

Makefile:

_test.so: test.cc test.hh test.i
    swig -python -c++ test.i
    g++ -fpic -shared -o _test.so test.cc test_wrap.cxx -I/opt/local/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -L/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config/ -lpython2.7

Ответы на вопрос(2)

Ваш ответ на вопрос