이 포럼에서 여러 가지 방법으로 질문합니다.하지만 필자가해야 할 일에 대해 알아볼 수있는 가장 좋은 방법은 아직 없습니다. 게시물). 그래서 나는 더 많은 조언을 구하는 것을 기뻐했습니다!기본 클래스에서 파생 클래스로 변경하는 가장 좋은 방법
class MsgBase
{
public:
uint8_t getMsgType(void);
protected: // So that derived classes can access the member
char _theMsgData[100];
}
class MsgType1 : public MsgBase
{
}
class MsgType2 : public MsgBase
{
}
그래서 무슨 일하면 내가 메시지 데이터의 블록을 받아 내 메시지를 작성하는 데 사용할 수 있습니다 :
나는, (생략 대부분의 세부 사항) 같은 것을 메시지 클래스 계층 구조를 가지고있다. 그러나 메시지 유형을 읽을 때까지 작성할 메시지를 알지 못합니다. 그래서 결국 :
MsgBase rxMsg(rxData);
if (rxMsg.getMsgType() == 1)
{
// Then make it a MsgType1 type message
}
else if (rxMsg.getMsgType() == 2)
{
// Then make it a MsgType2 type message
}
이것은 내가 붙어있는 비트입니다. 내가 읽은 것으로부터, 나는 기초로부터 파생에 이르기까지 역동적 인 캐스트를 할 수 없다.
if (rxMsg.getMsgType() == 1)
{
// Now use the same data to make a MsgType1 message.
MsgType1 rxMsg(rxData);
}
가 나는 그것의 유형을 결정 할 수 있도록 내가 기본 클래스로 데이터를 볼 수있는 방법이 있나요 : 그래서 내 현재 옵션은 (비효율적 인 것 같다) 완전히 새로운 파생 유형, 즉 인스턴스를하는 것입니다 그런 다음 그것을 "파생 된 유형"으로 변형시킵니다.
감사합니다, 사료
'getMsgType'은 어떻게 작동합니까? – asaelr
(모든 유형의) 클래스를 인스턴스화하면 데이터는 기본 클래스 멤버 char _theMsgData []에 저장됩니다. 그런 다음 getMsgType은 메시지 유형 값을 포함하는 특정 요소를 읽고 정수를 리턴합니다. 예를 들어 그 구현은 다음과 같을 수 있습니다 : return _theMsgData [1]; –
모든 관련 정보는'rxData' 변수에있는 것 같습니다. 따라서 타입 정보는'rxData'에 문의하십시오. – MWid