Этот класс содержит несколько вычислительных функций, которые необходимо перегрузить.
Например:
< pre class="lang-cpp Prettyprint-override">
Код: Выделить всё
class myCppClass
{
public:
myCppClass(){}
virtual Eigen::vectorXd compute_things();
void update_class()
{
// ... do things
toto = compute_things();
// ... do other things
}
protected:
Eigen::vectorXd _toto;
};
Чтобы добиться этого, я использую функцию директора SWIG вместе с картами типов Eigen, разработанными в этом репозитории.
Вот что мой файл .i выглядит так:
Код: Выделить всё
%module(package="example", directors="1", allprotected="1", "threads"=1) My_Example
%{
#include
}
%import
%include
%include
%import "numpy.i"
%feature("director") myCppClass;
%include
Код: Выделить всё
class myPythonClass(myCppClass):
def __init__(self):
super().__init__()
def compute_things(self):
return np.array([2.0, 1.0])
myclass = myPythonClass()
myclass.upadate_class()
"TypeError: несоответствие типа директора SWIG в выходном значении типа 'Eigen::VectorXd'"
Однако, если я вызываю метод Compute_things напрямую, он работает без каких-либо проблем.
Некоторый дополнительный контекст:
- В моем полном коде экземпляр myPythonClass disown(), но я не могу поделиться здесь полной реализацией.
- Если я заменю Eigen::VectorXd с более «стандартными» типами, такими как std::vector, int или double, все работает нормально.
- I попробовал добавить операторы отладочной печати во все карты типов Eigen. Кажется, что TypeError возникает до того, как срабатывают карты типов, поэтому я не уверен, в чем заключается проблема.
Большое спасибо!
также опубликовано здесь: https://github.com/swig/swig/ обсуждения/3080
Подробнее здесь: https://stackoverflow.com/questions/792 ... envectorxd
Мобильная версия