c++ - Confusion between boost::bind and boost::phoenix placeholders -


बढ़ावा :: भावना दस्तावेज़ीकरण में यह महत्वपूर्ण चेतावनी है

आत्मा के लिए सिमेंटिक कार्यों को लिखने के लिए अलग-अलग तरीके हैं। क्वाई: सादे कार्यों का उपयोग, बूस्ट.बंड , बूस्ट.लैम्डा , या फीनिक्स । उत्तरार्द्ध तीन आपको पैरामीटर प्लेसमेंट ( _1 , _2 , आदि) को नियंत्रित करने के लिए विशेष प्लेसहोल्डर का उपयोग करने की अनुमति देते हैं। प्रत्येक पुस्तकालयों में यह जगहधारकों के स्वयं के कार्यान्वयन है, सभी अलग-अलग नामस्थानों में। आपको सुनिश्चित करना है कि प्लेसहोल्डर्स को एक लाइब्रेरी के साथ मिश्रण न करना चाहिए, जिसका अर्थ वे नहीं हैं और सिमेंटिक एक्शन लिखते समय विभिन्न पुस्तकालयों का उपयोग नहीं करते हैं।

सामान्यतया, बूस्ट.बंड , :: _ 1 , :: _ 2 , आदि का उपयोग करें (हाँ, इन प्लेसहोल्डर को वैश्विक नामस्थान में परिभाषित किया गया है)।

Boost.Lambda नामस्थान बढ़ावा :: लैम्ब्डा में परिभाषित प्लेसहोल्डर का उपयोग करें।

फीनिक्स का उपयोग करते हुए लिखा गया सिमेंटिक कार्यों के लिए नामस्थान boost में वर्णित प्लेसहोल्डर का उपयोग करें :: भावना । कृपया ध्यान दें कि आपकी सुविधा के लिए सभी मौजूदा प्लेसहोल्डर्स नाम स्थान boost :: spirit :: qi

()

से उपलब्ध हैं , इसलिए मैं यह कोड लिखता हूं

  टेम्पलेट & lt; typename iterator & gt; Struct ruleset_grammar: qi :: व्याकरण & lt; इटरेटर & gt; {टेम्प्लेट & lt; typename TokenDef & gt; Ruleset_grammar (TokenDef const & amp; टो): ruleset_grammar :: base_type (प्रारंभ) {start = * (tok.set_name [boost :: bind (& cRuleSet :: setName, और theRuleSet, :: _ 1)]); } Qi :: नियम & lt; इटरेटर & gt; प्रारंभ; };   

कृपया :: _ 1

के उपयोग पर ध्यान दें हालांकि, मैं अभी भी यह संकलक त्रुटि प्राप्त करता है

  C: \ documents and settings \ james \ spirit_test.cpp (138): त्रुटि C2872: '_1': अस्पष्ट प्रतीक 'c: \ program files \ boost \ boost_1_44 \ boost \ spirit \ home \ support \ argument.hpp हो सकता है (124): कॉन्स्ट बूस्ट :: फीनिक्स :: अभिनेता & lt; Eval & gt; Boost :: spirit :: _ 1 'के साथ [Eval = boost :: spirit :: argument & lt; 0 & gt; ] या 'सी: \ प्रोग्राम फाइलों को बढ़ावा दें \ boost_1_44 \ boost \ bind \ placeholders.hpp (43): boost :: arg & lt; I & gt;  के साथ 'अनाम-नामस्थान' :: _ 1 '  

मैं इस संकलक त्रुटि को कैसे ठीक करूं?

क्या आपने शायद एक नामस्थान बढ़ावा :: भावना का उपयोग किया है; कहीं उस फ़ाइल के शीर्ष पर? क्योंकि यदि हां, तो दोनों आत्मा और साथ ही बाइंड प्लेसहोल्डर वैश्विक नाम स्थान में हैं qi :: का प्रत्यक्ष उपयोग मेरी धारणा का समर्थन कर सकता है, लेकिन यह भी एक सरल नामस्थान qi = boost :: spirit :: qi हो सकता है।

Comments

Popular posts from this blog

qt - switch/case statement in C++ with a QString type -

python - sqlite3.OperationalError: near "REFERENCES": syntax error - foreign key creating -

Python's equivalent for Ruby's define_method? -