C++ 如何序列化boost::函数以在消息队列中发送它
实际上,我正在尝试使用boost::serialize序列化boost::函数,因为我想在boost::进程间::消息队列中共享它。 我只看到一种方法,那就是使用boost::serialize的非侵入性版本C++ 如何序列化boost::函数以在消息队列中发送它,c++,boost,boost-serialization,boost-function,boost-interprocess,C++,Boost,Boost Serialization,Boost Function,Boost Interprocess,实际上,我正在尝试使用boost::serialize序列化boost::函数,因为我想在boost::进程间::消息队列中共享它。 我只看到一种方法,那就是使用boost::serialize的非侵入性版本 namespace boost { namespace serialization { template<class Archive> void serialize(Archive & ar, boost::functi
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;
}
}
}
namespace boost{
命名空间序列化{
模板
void序列化(存档&ar,boost::函数&fct,常量unsigned int版本)
{
ar&fct.args;
应收账款和现金流量;
ar&fct.vtable;
ar&fct函子;
}
}
}
我还需要序列化vtable和functor,我没有尝试过,我不确定它是否正常工作
那么,有没有办法以适当的方式序列化boost::函数呢
谢谢。我想没有办法。为了能够序列化函数,您需要能够序列化其二进制代码。但这是不可能的,因为代码至少依赖于平台
但是,您可以创建一个函数表并序列化该表中函数的索引。在反序列化程序中,您需要构造同一个表,并使用序列化索引从表中获取实际函数。这不可能立即实现 我能想到两个问题:
- 传递函数的标识
- 传递函数的上下文(例如,如果使用
或lambda创建)bind
命令
模式,以及序列化这些命令的方法
这要求这两个进程都构建在一组公共命令之上(公共库似乎是个好主意),并为命令实现序列化和反序列化
对于反序列化,您需要查找虚拟构造函数习惯用法。这对我来说太糟糕了,但谢谢您,我会考虑命令模式。
boost::function
具有和成员函数,可以在序列化过程中使用。