У меня есть следующий С++
class myfun{
public:
virtual double eval(arma::vec& x){};
};
double op(myfun* f, arma::vec& x){
return f->eval(x);
}
где arma::vec
— вектор броненосца C++, для которого я использую armanpy.i для перевода массива numpy в объект arma::vec и наоборот.
После включения директоров swig и создания интерфейса SWIG для приведенного выше кода C++ я создаю класс python, который переопределяет виртуальный метод eval:
class f(mymodule.myfun):
def __init__(self):
super(f,self).__init__()
def eval(self,x):
print x
return 3.14
В python я сначала создаю экземпляр f, который наследует myfun:
b = f()
Затем я передаю это op
:
mymodule.op(b,array([3.,4.]))
который выводит
<Swig Object of type 'arma::vec *' at 0x10e6dcc30>
3.14
Python не интерпретирует arma::vec * как пустой массив, как я думал, он делает это в файле armanpy.i. Любые идеи? Я не женат на arma::vec, и я мог бы заменить arma::vec пустым вектором.
Спасибо!