@@ -425,6 +425,33 @@ namespace eigenpy
425425 }
426426 };
427427
428+ template <typename MatType>
429+ struct EigenFromPy < Eigen::MatrixBase<MatType> >
430+ {
431+ typedef EigenFromPy<MatType> EigenFromPyDerived;
432+ typedef Eigen::MatrixBase<MatType> Base;
433+
434+ // / \brief Determine if pyObj can be converted into a MatType object
435+ static void * convertible (PyArrayObject* pyObj)
436+ {
437+ std::cout << " call: EigenFromPy< Eigen::MatrixBase<MatType> >::convertible" << std::endl;
438+ return EigenFromPyDerived::convertible (pyObj);
439+ }
440+
441+ // / \brief Allocate memory and copy pyObj in the new storage
442+ static void construct (PyObject* pyObj,
443+ bp::converter::rvalue_from_python_stage1_data* memory)
444+ {
445+ std::cout << " call: EigenFromPy< Eigen::MatrixBase<MatType> >::construct" << std::endl;
446+ EigenFromPyDerived::construct (pyObj,memory);
447+ }
448+
449+ static void registration ()
450+ {
451+ bp::converter::registry::push_back
452+ (reinterpret_cast <void *(*)(_object *)>(&EigenFromPy::convertible),
453+ &EigenFromPy::construct,bp::type_id<Base>());
454+ }
428455 };
429456
430457#define numpy_import_array () {if (_import_array () < 0 ) {PyErr_Print (); PyErr_SetString (PyExc_ImportError, " numpy.core.multiarray failed to import" ); } }
@@ -441,10 +468,10 @@ namespace eigenpy
441468 static void registration ()
442469 {
443470 EigenFromPy<MatType>::registration ();
471+
444472 // Add also conversion to Eigen::MatrixBase<MatType>
445- bp::converter::registry::push_back
446- (reinterpret_cast <void *(*)(_object *)>(&EigenFromPy<MatType>::convertible),
447- &EigenFromPy<MatType>::construct,bp::type_id< Eigen::MatrixBase<MatType> >());
473+ typedef Eigen::MatrixBase<MatType> MatTypeBase;
474+ EigenFromPy<MatTypeBase>::registration ();
448475 }
449476 };
450477
0 commit comments