Serialize a boost function (actually a member function pointer)

Hi, I want to use boost serialization to serialize a boost function. In other places I learned that I need to use non-intrusive serialization and the target<>() method, but I still don't get it to work: #include <vector> #include <iostream> #include <fstream> #include <boost/archive/text_oarchive.hpp> #include <boost/archive/text_iarchive.hpp> #include <boost/function.hpp> class A { public: void func1() { std::cout << "Hello World"; } }; typedef void (A::*fPointerType)(); class FuncPointerWrapper { boost::function<void (A*)> f; friend class boost::serialization::access; template<typename Archive>void serialize(Archive & ar, const unsigned int version) { ar & f; } public: FuncPointerWrapper() {} FuncPointerWrapper(fPointerType fun) { f = fun; } boost::function<void (A*)> getFuncPointer() {return f;} }; //non-intrusive namespace boost { namespace serialization { template<typename Archive>void serialize(Archive & ar,boost::function<void (A*)> & f, const unsigned int version) { ar & (f.template target<fPointerType>()); //error: no match for 'operator&' in 'ar & ((boost::function_base*)(+f))->boost::function_base::target [with Functor = void (A::*)()]()'| // but how do I have to use it then? } } } int main() { FuncPointerWrapper fpw(&A::func1); std::ofstream ofs("filename"); { boost::archive::text_oarchive oa(ofs); // write class instance to archive oa << fpw; // archive and stream closed when destructors are called } A a; fpw.getFuncPointer()(&a); // Some other place, some other time: FuncPointerWrapper fpw2; { std::ifstream ifs("filename"); boost::archive::text_iarchive ia(ifs); ia >> fpw2; } A b; fpw2.getFuncPointer()(&b); }
participants (1)
-
Fabian Fritz