如何序列化boost :: function以在message_queue中发送它

Max*_*ITT 5 c++ boost boost-serialization boost-interprocess boost-function

我实际上是尝试使用boost :: serialize序列化boost :: function,因为我想在boost :: interprocess :: message_queue中共享它.我只看到一种方法,它是使用非侵入式版本的boost :: serialize.

namespace boost {   
 namespace serialization {
       template<class Archive>   
           void serialize(Archive & ar, boost::function<void()> & fct, const unsigned int version) 
       {
     ar & fct.args;
     ar & fct.arity;
     ar & fct.vtable;
     ar & fct.functor;
       }       
  }
}
Run Code Online (Sandbox Code Playgroud)

我还需要序列化vtable和functor,我没有尝试过,我不确定它是否正常工作.

那么有没有办法以正确的方式序列化boost :: function?

谢谢.

Mat*_* M. 4

这不可能立即实现。

我能想到有两个问题:

  • 传递函数的身份
  • 传递函数的上下文(例如,如果使用bindlambda 或通过 lambda 创建)

两者都不是微不足道的,而且如果不检测代码就无法完成(想想反射/内省)。

这里您需要的是Command模式以及序列化这些命令的方法。

这要求两个进程都构建在一组通用命令之上(通用库似乎是个好主意),并且您为命令实现序列化和反序列化。

对于反序列化,您需要查找虚拟构造函数惯用语。