나는 이러한 유형의 멤버 포인터를 가지고 :새 개체 인스턴스화. 이것이 맞는지 확실하지 않은가요?
const TopState<TestHSM>* state_;
state_
다형성 타입이다.
template<typename H>
struct TopState {
//... functions etc
};
이 계층의 비트가 추상적없는 마지막 LeafState
있는 :
//indentation to indicate state nesting
typedef CompState<TestHSM,0> Top;
typedef CompState<TestHSM,1,Top> S0;
typedef CompState<TestHSM,2,S0> S1;
typedef LeafState<TestHSM,3,S1> S11;
typedef CompState<TestHSM,4,S0> S2;
typedef CompState<TestHSM,5,S2> S21;
typedef LeafState<TestHSM,6,S21> S211;
:
template<typename H, unsigned id,
typename B=CompState<H,0,TopState<H> > >
struct LeafState : B {
//...functions
static const LeafState obj;
};
다음 개체
상태를 나타냅니다TopState
참고 만 S11
및 S211
(LeafState
')을 인스턴스화 할 수 있습니다.
class TestHSM {
public:
TestHSM() {
state_ = new S11;
}
//fix destruction - problem
~TestHSM() {
//reset to s11
// state_ = &S11;
// delete state_;
// state_ = 0;
}
void next(const TopState<TestHSM>& state)
{
state_ = &state;
}
private:
const TopState<TestHSM>* state_;
};
내 문제는 지금 state_
개체의 창조 :
TestHSM
클래스가 있습니다. 위의 생성자를 참조하십시오. 이 방법이 올바른 방법 일지는 모르겠지만 완전히 효과가 있습니까?
S11
은 개체를 인스턴스화 할 수있는 첫 번째 상태이며 내 프로그램에서는 S11
이 시작시 첫 번째 상태입니다. 코드는 예상대로 작동합니다. 또는 어쨌든 것 같습니다. 하지만 이것이 주먹구구 한 상태를 보여주기위한 최적의 방법이라고 생각하지 않습니까?
또한이 작업을 수행하면 state_
을 삭제하려고 할 때 힙 메모리 런타임 오류가 발생합니다. 소멸자 코드를 참조하십시오.
제안 사항?
앵거스
코드를 최소화 할 수 있습니까? –