![](/img/trans.png)
[英]Boost::message_queue::receive/send not working with latest version
[英]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.