У меня есть две шаблоны с swig с кучей дубликата кода в них. Я хотел бы, чтобы закрепить код следующим образом:Как я могу повторно использовать код через шаблоны типов swig?
%{
#include "structure_defs.h"
%}
%ignore Cartesian2PyList(const schrodinger::Cartesian&);
PyObject* Cartesian2PyList(const schrodinger::Cartesian& cartesian)
{
PyObject *o;
o = PyList_New(3);
PyObject* item = PyFloat_FromDouble(cartesian.x);
PyList_SetItem(o, 0, item);
item = PyFloat_FromDouble(cartesian.y);
PyList_SetItem(o, 1, item);
item = PyFloat_FromDouble(cartesian.z);
PyList_SetItem(o, 2, item);
return o;
}
%typemap(out) schrodinger::Cartesian
{
$result = Cartesian2PyList($1);
}
%typemap(out) std::vector<schrodinger::Cartesian>
{
PyObject *o;
o = PyList_New($1.size());
for (uint i=0; i<$1.size(); i++) {
PyObject *elem = Cartesian2PyList($1.at(i));
PyList_SetItem(o, i, elem);
}
$result = o;
}
%include "cartesian.h"
Однако это не удается скомпилировать, потому что определение Cartesian2PyList не может быть найдено во время компиляции. Каков наилучший способ повторного использования кода в нескольких типах?