Hello everybody,
 
I'm currently trying to serialize functors.
Apparently, it is not possible to serialize boost::function objects,
is it possible to find a way to serialize pointer to function ? (in order to make working the example below*)
If it is definitively not possible, is there a way to 'register' a relation betwwen objects and functor ? (using MPL library).
The idea is to rebuild the boost function according to the 'Object and 'Type' class of the template'.
 
Example: 
 
mpl::pair<Object,Function> container;
serialize()
{
boost::function<Type ()> m_getter=mpl::at< container,Object>;
}
 
 
*Here is the problem that  I'm trying to resolve:
 
MyObject myObject("before");
SetCommand<std::string,MyObject> SetCommand(myObject,&MyObject::setName,&MyObject::getName,"after");
 
SetCommand.do();   // call functor 'MyObject::setName("after")'
SetCommand.undo(); // call functor 'MyObject::setName("before")'


template<typename Type,typename Object>
class SetCommand : public Command
{


  public:
        template <typename Setter, typename Getter>
        SetCommand(Object& o, const Setter& setter, const Getter& getter, const Type& value) :
            Command(),
            m_getter(boost::bind(getter, &o)),
    m_setter(boost::bind(setter, &o, _1)),
            initialValue(m_getter()),
            finalValue(value)
        {
        }
 
virtual void undo()
        {
            m_setter(initialValue) ;
        }
 
        virtual void do()
        {
            m_setter(finalValue) ;
        }
 
   private:

friend class boost::serialization::access;

SetCommand(){}

template <class Archive> 
void serialize( Archive & ar, const unsigned int version )
{

   ar & m_getter; ERROR -> does not compile !!!
   ar & m_setter; ERROR -> does not compile !!!

   ar & initialValue;
   ar & finalValue;
}

boost::function<Type ()> m_getter ;
        boost::function<void (Type)> m_setter ;
 
        Type initialValue ;
        Type finalValue ;
};

Thanks in advance.




--------------------------------------------------------------
Ovi Mail: Making email access easy
http://mail.ovi.com