부스트 스피릿 퀴를 사용하여 인바운드 데이터를 구문 분석 한 다음 내용에 따라 올바른 기능을 디스패치합니다.phoenix bind로 부스트 신호를 바인딩하십시오.
boost::signals
을 사용하여 콜백을 관리합니다. 내 문제는 부스터 신호로 phoenix bind를 사용할 수없는 것 같다. 오류의 벽을 침,이 컴파일되지 않습니다
#include <boost/signals.hpp>
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix_bind.hpp>
#include <boost/spirit/include/phoenix_core.hpp>
#include <iostream>
void f(int i) {
std::cout << i << '\n';
}
int main() {
boost::signal<void(int)> sig;
sig.connect(f);
std::string s="123";
auto first=s.cbegin(), last=s.cend();
boost::spirit::qi::parse(
first, last,
(
boost::spirit::qi::int_
[
boost::phoenix::bind(sig, boost::spirit::qi::_1)
]
)
);
}
:
는 다음 테스트 케이스를 생각해 보자. 내가 예상대로 작동boost::phoenix::bind(&f, boost::spirit::qi::_1)
와 피닉스 바인드 선을 대체하는 경우 (단 인해 프로그램의 큰 디자인이 가능하지 않다) 것을
는참고.
미리 감사드립니다.
위'높일 수있는 라인 :: 바인드 변경하려는 경우 컴파일 것 (부스트 :: REF (시그), _1) '(적절한 헤더를 포함). 그러나 어떤 이유로 나는 phoenix와 함께 ref로'sig'를 전달하지 못했습니다. –