Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何序列化boost::函数以在消息队列中发送它_C++_Boost_Boost Serialization_Boost Function_Boost Interprocess - Fatal编程技术网

C++ 如何序列化boost::函数以在消息队列中发送它

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

实际上,我正在尝试使用boost::serialize序列化boost::函数,因为我想在boost::进程间::消息队列中共享它。 我只看到一种方法,那就是使用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;
       }       
  }
}
namespace boost{
命名空间序列化{
模板
void序列化(存档&ar,boost::函数&fct,常量unsigned int版本)
{
ar&fct.args;
应收账款和现金流量;
ar&fct.vtable;
ar&fct函子;
}       
}
}
我还需要序列化vtable和functor,我没有尝试过,我不确定它是否正常工作

那么,有没有办法以适当的方式序列化boost::函数呢


谢谢。

我想没有办法。为了能够序列化函数,您需要能够序列化其二进制代码。但这是不可能的,因为代码至少依赖于平台


但是,您可以创建一个函数表并序列化该表中函数的索引。在反序列化程序中,您需要构造同一个表,并使用序列化索引从表中获取实际函数。

这不可能立即实现

我能想到两个问题:

  • 传递函数的标识
  • 传递函数的上下文(例如,如果使用
    bind
    或lambda创建)
这两者都不是微不足道的,如果不插入代码(思考反射/内省),这两者都无法完成

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

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


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

这对我来说太糟糕了,但谢谢您,我会考虑命令模式。
boost::function
具有和成员函数,可以在序列化过程中使用。