BOOST_FUSION_ADAPT_STRUCT не принимает правильное количество аргументов - PullRequest
9 голосов
/ 05 августа 2011

Я использую 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 Ответ

12 голосов
/ 05 августа 2011

Скорее всего, проблема std::pair<std::string,std::string>.

Проблема в том, что в типе есть запятая, которая будет портить расширение макроса (при использовании последнего элемента вашего списка).

Вы должны попробовать обернуть тип в отдельный набор скобок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...