मैं कुछ पाठ को structs में पार्स करने के लिए बूस्ट :: आत्मा का उपयोग कर रहा हूं। इसके लिए पाठ को पार्स करने और सीधे संरचना में संग्रहीत करने के लिए BOOST_FUSION_ADAPT_STRUCT का उपयोग करने की आवश्यकता है। मुझे पता है कि मैक्रो 2 तर्क लेता है: संरचना का नाम पहला तर्क और सभी संरचना सदस्यों को दूसरे तर्क के रूप में। और मैं केवल उनको पास कर रहा हूं 2. लेकिन मुझे संकलन त्रुटि मिल रही है,BOOST_FUSION_ADAPT_STRUCT तर्कों की सही संख्या नहीं लेता
error: macro "BOOST_FUSION_ADAPT_STRUCT_FILLER_0" passed 3 arguments, but takes just 2
यहां कोड स्निपेट है। अगर आपको पूरे कोड की ज़रूरत है तो मुझे बताएं।
धन्यवाद।
namespace client
{
namespace qi = boost::spirit::qi;
namespace ascii = boost::spirit::ascii;
namespace phoenix = boost::phoenix;
struct Dir_Entry_Pair
{
std::string dir;
std::string value1;
std::pair<std::string, std::string> keyw_value2;
};
}
BOOST_FUSION_ADAPT_STRUCT(
client::Dir_Entry_Pair,
(std::string, dir)
(std::string, value1)
(std::pair< std::string, std::string >, keyw_value2))
यह नियम मैं पार्स करने के लिए कोशिश कर रहा हूँ,
qi::rule<Iterator, Dir_Entry_Pair()> ppair = dir
>> '/'
>> entry
>> -(keyword >> entry);
धन्यवाद! मैंने बस std :: pair <..> टाइप किया है और यह काम किया है :) – Nik
@Nik: यह मैक्रोज़ के साथ एक आम समस्या है - आम तौर पर 'मानचित्र' पर 'BOOST_FOREACH' के साथ आता है जो फ़्यूज़न/आत्मा संयोजन से थोड़ा अधिक आम है :) आशा है कि आप उन लोगों के साथ मजाक कर रहे हैं! –