BOOST_FUSION_ADAPT_STRUCT не принимает правильное количество аргументов
Я использую Boost::Spirit для разбора текста в структуры. Это требует использования BOOST_FUSION_ADAPT_STRUCT для анализа текста и непосредственного сохранения в структуре. Я знаю, что макрос принимает 2 аргумента: имя структуры в качестве первого аргумента и все члены структуры в качестве второго аргумента. И я передаю только те 2. Но я получаю ошибку компиляции, говоря,
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);
1 ответ
Скорее всего, проблема заключается в std::pair<std::string,std::string>
,
Проблема в том, что в типе есть запятая, которая будет разрушать макро-расширение (при использовании последнего элемента вашего списка).
Вы должны попробовать обернуть тип в его собственный набор скобок.