|
Boost Users : |
Subject: [Boost-users] Serialization of functors and MPL use
From: Anonymous user (nokiac5eel_at_[hidden])
Date: 2010-09-16 16:43:27
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
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net