메시지를 처리기로 라우트하는 클래스가 있다고합니다. 이 클래스는 소켓을 통해 메시지를받는 다른 클래스의 메시지를 가져옵니다. 그래서 소켓은 어떤 종류의 메시지를 담고있는 버퍼를 얻는다.알 수없는 상속 된 형식 비 직렬화 [C++]
메시지를 라우트하는 클래스는 메시지 유형을 알고 있습니다. 모든 메시지는 메시지 ID를 포함하는 Message 클래스를 상속하며, 물론 자신의 매개 변수를 추가합니다.
문제는 어떻게 버퍼에서 메시지를 올바른 유형의 실제 메시지 인스턴스로 전송할 수 있습니까?
예를 들어, 메시지를 계승하는 DoSomethingMessage가 있습니다. 나는 메시지를 담고있는 버퍼를 얻었지만, DoSomethingMessage라는 것을 알지 못하고 버퍼를 다시 DoSomethingMessage로 변환해야한다.
버퍼를 MessageRouter로 전송할 수 있었고 ID로 확인하여 올바른 인스턴스를 만들 수 있었지만 실제로는 나쁘다고 생각합니다.
제안 사항?
어떤 유형의 메시지가 매핑되는지 알고 있어야하므로 일부 ID와 일부 종류의 팩토리가 필요합니다. C++은 어떤 유형으로 매핑되는지 마술처럼 추측 할 수 없습니다. –