2011-05-16 8 views
1

유닛 테스트의 경우 상태 머신 이벤트를 시작한 후에 모든 상태 트랜잭션을 기록하려고합니다.
예를 들어, A를 async_state_machine의 fifo_scheduler에 post_event하면, 상태 머신은 B, C 상태를 거쳐 D로 돌아갑니다. 모든 이벤트 상태를 기록 할 수는 없지만, 상태 테스트가 끝나면 상태 D가 끝났습니다 .-- (boost :: statechart에서 상태 기록 변경

내가 생각할 수있는 유일한 것은 내가 만든 모든 상태의 생성기 (simple_state에서 파생 됨)를 수정하는 것입니다. 이것은 실제로 상태의 react() 메서드를 호출하기 전에 async_state_machine에 연결하고 싶을 때 조금은 해킹하는 것처럼 보입니다 ...

답변

0

내가 정말로 필요할 때 이것은 약간 hackish 한 것처럼 보입니다. 상태의 react() 메서드를 호출하기 직전에 async_state_machine에 후크하기 위해 ...

왜 그렇지 않습니까? async_state_machine을 확장하는 새 클래스를 만들고 원하는 후크를 추가합니다. 접근이 문제가 될 경우에는, #define private public가 (또는 protected 해킹 상태 차트를 포함하기 전에.

나는 국가의 역사에 지역 변수를 추가하고 새로운 종류를 추가 할 비슷한 일을 한 적이 장관을 (아마 것)이 국가 전체의 역사를 가지고 있습니다.

+0

감사합니다. Kitsune. 그건 좋은 대안 해킹이야. 아직 꽤 해킹되었습니다. 부스트의 상태 차트가 재 설계되어야이 정보를 더 쉽게 얻을 수 있어야합니다. 이 추악한 해결 방법을 사용한 경우, 다른 사람들도 원했을 것 같습니다 ... – kenyee

0

각 상태는 부스트 상태 머신에 의해 사용되기 전에 생성됩니다 (다음 상태로 넘어간 후 파괴됩니다 ... 비효율적 인 것처럼 보입니다.)) 그래서 각 상태는 생성자에 콜백을 가진 다른 클래스에서 파생되었습니다. 여전히 조금은 해킹 된 것 같습니다. boost ++가 이것을 수행하는 더 깨끗한 방법을 가졌습니다. -P

관련 문제