19 #ifndef __se3_visitor_hpp__    20 #define __se3_visitor_hpp__    22 #define     BOOST_FUSION_INVOKE_MAX_ARITY 10    23 #include <boost/fusion/include/invoke.hpp>    24 #include <boost/fusion/include/algorithm.hpp>    25 #include "pinocchio/multibody/joint/joint-variant.hpp"    32     template<
typename T,
typename V>
    33     typename result_of::push_front<V const, T>::type
    34     append(T 
const& t,V 
const& v) { 
return push_front(v,t); }
    37     template<
typename T1,
typename T2,
typename V>
    38     typename result_of::push_front<typename result_of::push_front<V const, T2>::type 
const, T1>::type
    39     append2(T1 
const& t1,T2 
const& t2,V 
const& v) { 
return push_front(push_front(v,t2),t1); }
    50     template<
typename Visitor>
    56   JointDataVariant& jdataSpec = 
static_cast<const Visitor*
>(
this)->jdata;
    58   bf::invoke(&Visitor::template algo<D>,
    59        bf::append2(boost::ref(jmodel),
    60              boost::ref(boost::get<typename D::JointDataDerived>(jdataSpec)),
    61              static_cast<const Visitor*>(
this)->args));
    64       template<
typename ArgsTmp>
    65       static void run(
const JointModelVariant & jmodel,
    66           JointDataVariant & jdata,
    69   return boost::apply_visitor( Visitor(jdata,args),jmodel );
    74     template<
typename Visitor>
    80         bf::invoke(&Visitor::template algo<D>,
    81                    bf::append(boost::ref(jmodel),
    82                               static_cast<const Visitor*>(
this)->args));
    85       template<
typename ArgsTmp>
    86       static void run(
const JointModelVariant & jmodel,
    89   return boost::apply_visitor( Visitor(args),jmodel );
    96 #define JOINT_VISITOR_INIT(VISITOR)         \    97   VISITOR( JointDataVariant & jdata,ArgsType args ) : jdata(jdata),args(args) {} \    98   using se3::fusion::JointVisitor< VISITOR >::run;      \    99   JointDataVariant & jdata;           \   103 #define JOINT_MODEL_VISITOR_INIT(VISITOR)         \   104   VISITOR(ArgsType args ) : args(args) {} \   105   using se3::fusion::JointModelVisitor< VISITOR >::run;      \   108 #endif // ifndef __se3_visitor_hpp__