diff --git a/include/eigenpy/angle-axis.hpp b/include/eigenpy/angle-axis.hpp index b1371237bd9407e63480f4ebbb9e81481c64a6ae..e7aca37a4e4a366ff3151ce4a57091bd263e0e4d 100644 --- a/include/eigenpy/angle-axis.hpp +++ b/include/eigenpy/angle-axis.hpp @@ -6,20 +6,35 @@ #ifndef __eigenpy_angle_axis_hpp__ #define __eigenpy_angle_axis_hpp__ +#include "eigenpy/fwd.hpp" + #include <boost/python.hpp> #include <Eigen/Core> #include <Eigen/Geometry> -#include "eigenpy/registration.hpp" - namespace eigenpy { namespace bp = boost::python; + + template<typename AngleAxis> class AngleAxisVisitor; + + namespace internal + { + template<typename Scalar> + struct call_expose< Eigen::AngleAxis<Scalar> > + { + typedef Eigen::AngleAxis<Scalar> type; + static inline void run() + { + AngleAxisVisitor<type>::expose(); + } + }; + } // namespace internal template<typename AngleAxis> class AngleAxisVisitor - : public boost::python::def_visitor< AngleAxisVisitor<AngleAxis> > + : public bp::def_visitor< AngleAxisVisitor<AngleAxis> > { typedef typename AngleAxis::Scalar Scalar; @@ -103,8 +118,6 @@ namespace eigenpy static void expose() { - if(register_symbolic_link_to_registered_type<AngleAxis>()) return; - bp::class_<AngleAxis>("AngleAxis", "AngleAxis representation of rotations.\n\n", bp::no_init) diff --git a/include/eigenpy/quaternion.hpp b/include/eigenpy/quaternion.hpp index ed289d0e43882c9795a09a5c9606a17b64afdc0d..2017d4ea14a942d63fc7613330071ba13546e110 100644 --- a/include/eigenpy/quaternion.hpp +++ b/include/eigenpy/quaternion.hpp @@ -6,6 +6,8 @@ #ifndef __eigenpy_quaternion_hpp__ #define __eigenpy_quaternion_hpp__ +#include "eigenpy/fwd.hpp" + #include <Eigen/Core> #include <Eigen/Geometry> @@ -27,9 +29,24 @@ namespace eigenpy namespace bp = boost::python; + template<typename QuaternionDerived> class QuaternionVisitor; + + namespace internal + { + template<typename Scalar, int Options> + struct call_expose< Eigen::Quaternion<Scalar,Options> > + { + typedef Eigen::Quaternion<Scalar,Options> type; + static inline void run() + { + QuaternionVisitor<type>::expose(); + } + }; + } // namespace internal + template<typename Quaternion> class QuaternionVisitor - : public boost::python::def_visitor< QuaternionVisitor<Quaternion> > + : public bp::def_visitor< QuaternionVisitor<Quaternion> > { typedef Eigen::QuaternionBase<Quaternion> QuaternionBase; @@ -203,8 +220,6 @@ namespace eigenpy static void expose() { - if(register_symbolic_link_to_registered_type<Quaternion>()) return; - bp::class_<Quaternion>("Quaternion", "Quaternion representing rotation.\n\n" "Supported operations " diff --git a/src/angle-axis.cpp b/src/angle-axis.cpp index 56999b9a6c5938f1ee44eca5858836482456af4b..f4e33ef0e56839457f1fbf57a379900462852f6c 100644 --- a/src/angle-axis.cpp +++ b/src/angle-axis.cpp @@ -13,6 +13,6 @@ namespace eigenpy { void exposeAngleAxis() { - AngleAxisVisitor<Eigen::AngleAxisd>::expose(); + expose<Eigen::AngleAxisd>(); } } // namespace eigenpy diff --git a/src/quaternion.cpp b/src/quaternion.cpp index 5690ef44f7da1466b69e45499c495041705d39bf..4ffa866c3537af1715493a65be342be9e1b6b79a 100644 --- a/src/quaternion.cpp +++ b/src/quaternion.cpp @@ -13,6 +13,6 @@ namespace eigenpy { void exposeQuaternion() { - QuaternionVisitor<Eigen::Quaterniond>::expose(); + expose<Eigen::Quaterniond>(); } } // namespace eigenpy