부스트 직원 예제를 기반으로 BOOST_FUSION_ADAPT_STRUCT를 사용하여 구조체를 내 보내려는 qi :: rule <을 얻으려고합니다.BOOST_FUSION_ADAPT_STRUCT에서 boost :: qi :: rule을 사용하는 올바른 방법은 무엇입니까?
I가 다음과 같은 구조체 및 관련 융합 매크로 :
struct LineOnCommand
{
int lineNum;
std::vector<char> humpType;
};
BOOST_FUSION_ADAPT_STRUCT(
LineOnCommand,
(int, lineNum)
(std::vector<char>, humpType)
)
연관된 구문 분석 규칙은 다음과 같습니다
qi::rule<Iterator, std::vector<char> ascii::space_type> humpIdentifer = qi::lit("BH") | qi::lit("DH");
qi::rule<Iterator, LineOnCommand(), ascii::space_type> Cmd_LNON = qi::int_ >> -humpIdentifier >> qi::lit("LNON");
내가 다음있는 다른 모든 (이 간단한을 포함한 복합 규칙을 가지고
qi::rule<Iterator, qi::unused_type, ascii::space_type> commands =
+(/* other rules | */ Cmd_LNON /*| other rules */);
bool success = qi::phrase_parse(StartIterator, EndIterator, commands, ascii::space);
문제 : 테스트 케이스) 파서로 전달하는 부분이다
<boostsource>/spirit/home/qi/detail/assign_to.hpp(152): error: no suitable constructor exists to convert form "const int" to "LineOnCommand"
attr = static_cast<Attribute>(val);
은 분명히 내가 뭔가를 잘못하고 있어요,하지만 난 모르겠어요 : 나는 컴파일을 시도, 나는 오류를 얻을 때 온다. spirit이 작동하는 방식을 이해한다면 규칙의 템플릿에 대한 두 번째 인수는 속성 (즉, 규칙에 의해 생성 된 데이터 유형)을 나타내며 BOOST_FUSION_ADAPT_STRUCT 매크로는 내 구조체를 적용하여 부스트가 "int, std :: vector".
여기서 내가하는 일과 부스트 직원 예제의 유일한 차이점은 구문 분석을 위해 명시 적 문법을 사용하지 않는다는 것입니다. 내 이해가 필요하지 않습니다, 그리고 그 자체로 규칙으로 충분합니다.
내가 뭘 잘못하고 있니?
그것은 당신의 질문은 본질적으로 관련이없는 경우 별도의 질문을 게시하는 것이 일반적으로보다 더 낫다입니다. 이 경우 그들은 그렇습니다. – sehe
예제를 자체 포함 시키십시오. 이것은 사람들이 쉽게 도울 수있게 해줍니다. (저는 이것을 스피릿에 잘 익숙하게 사용하는 사람들이이 코드를 작업 코드로 만들 수있을만큼 손의 손가락으로 계산할 수 있다고 생각합니다). – sehe