簡體   English   中英

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

[英]How serialize a boost::function to send it in a message_queue

我實際上正在嘗試使用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;
       }       
  }
}

我還需要序列化vtable和functor,我沒有嘗試過,我不確定它是否可以正常工作。

那么,有什么方法可以正確地序列化boost :: function?

謝謝。

這不可能立即實現。

我可以想到兩個問題:

  • 傳遞函數的身份
  • 傳遞函數的上下文(例如,如果使用bind或lambda創建)

兩者都不是瑣碎的事,而且如果不對代碼進行檢測就無法做到(想想反射/自省)。

您想要的是Command模式,以及一種序列化這些命令的方法。

這就要求兩個進程都建立在一組通用命令之上(一個通用庫似乎是個好主意),並且必須為命令實現序列化和反序列化。

對於反序列化,您將需要查找Virtual Constructor Idiom。

我認為沒有任何辦法可以做到。 為了能夠序列化一個函數,您將需要序列化其二進制代碼。 但這是不可能的,因為代碼至少取決於平台。

但是,您可以制作功能表並在該表中序列化功能的索引。 在反序列化器中,您將需要構造相同的表,並使用序列化索引從表中獲取實函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM