5

में भेजने के लिए कैसे काम करता है मैं वास्तव में boost :: serialize का उपयोग करके boost :: function को क्रमबद्ध करने की कोशिश कर रहा हूं क्योंकि मैं इसे बढ़ावा देने के लिए :: interprocess :: message_queue में साझा करना चाहता हूं। मुझे केवल ऐसा करने का एक तरीका दिखाई देता है, यह बढ़ावा :: 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 क्रमानुसार करने की आवश्यकता होगी, मुझे यकीन है कि यह काम कर रहा है नहीं कर रहा हूँ।

तो क्या कोई बढ़ावा :: फ़ंक्शन को उचित तरीके से क्रमबद्ध करने का कोई तरीका है?

धन्यवाद।

+0

'बूस्ट :: फ़ंक्शन' में ['target'] है (http://www.boost.org/doc/libs/1_54_0/doc/html/boost/function.html#idp12727952-bb) और [' target_type '] (http://www.boost.org/doc/libs/1_54_0/doc/html/boost/function.html#idp39712048-bb) सदस्य फ़ंक्शन - जिसका उपयोग क्रमिकरण के दौरान किया जा सकता है। –

उत्तर

4

यह तुरंत संभव नहीं होगा।

  • समारोह
  • समारोह के संदर्भ पारित की पहचान पारित (उदाहरण के लिए, अगर bind या के साथ एक लैम्ब्डा का उपयोग कर बनाया)
:

की मुझे लगता है कि कर सकते हैं 2 समस्याएं हैं

न तो मामूली है, और न ही कोड को मापने के बिना किया जा सकता है (प्रतिबिंब/आत्मनिरीक्षण सोचें)।

आप यहां क्या चाहते हैं Command पैटर्न, और उन आदेशों को क्रमबद्ध करने का एक तरीका है।

यह आवश्यक है कि दोनों प्रक्रियाएं कमांड के सामान्य सेट (एक सामान्य लाइब्रेरी एक अच्छा विचार की तरह लगती हैं) के शीर्ष पर बनाई गई हों और आप अपने आदेशों के लिए क्रमबद्धकरण और deserialization लागू करें।

deserialization के लिए, आप वर्चुअल कंस्ट्रक्टर Idiom को देखना चाहते हैं।

+0

यह मेरे लिए इतना बुरा है लेकिन धन्यवाद, मैं कमांड पैटर्न के बारे में सोचूंगा। –

2

मुझे नहीं लगता कि ऐसा करने का कोई तरीका है। किसी फ़ंक्शन को क्रमबद्ध करने में सक्षम होने के लिए आपको इसके बाइनरी कोड को क्रमबद्ध करने में सक्षम होना चाहिए। लेकिन यह संभव नहीं है क्योंकि कोड कम से कम प्लेटफॉर्म पर निर्भर है।

हालांकि आप उस तालिका में फ़ंक्शन तालिका और फ़ंक्शन का क्रमबद्ध अनुक्रमणिका बना सकते हैं। Deserializer में आपको उसी तालिका को बनाने और तालिका से वास्तविक कार्य प्राप्त करने के लिए धारावाहिक सूचकांक का उपयोग करने की आवश्यकता होगी।

संबंधित मुद्दे