필자의 시나리오에서는 Message 클래스를 통해 통신하는 Component A와 Component B가 있습니다.공통 클래스를 구성 요소 간의 비 공통 함수와 공유하는 방법은 무엇입니까?
class MessageA: public Message {
void prepare() {
...
}
void parse() {
...
}
void handle() {
componentA->executeFunctionABC(); // componentA is a global pointer
}
};
구성 요소 A가 MessageA 컴파일
구성 요소 B는 다음과 같습니다
내 메시지 클래스는 예를 들어, 모든 메시지는 메시지 클래스의 서브 클래스입니다이
class Message {
virtual void prepare();
virtual void parse();
virtual void handle();
};
처럼 보인다 MessageA로 컴파일
이렇게하면 컴포넌트 A가 Component B에 메세지를 송신하려면, MessageA 오브젝트를 인스턴스화 해 prepare() 해 송신합니다. Component B가 소켓을 통해 메시지를 수신하면이를 구문 분석()하고 handle()합니다.
이제 내 문제는 handle() 함수에 있습니다. 메시지의 수신자 만 handle() 함수를 호출합니다. handle() 함수의 구현은 수신 컴포넌트의 함수를 포함하는 특정 루틴을 실행해야합니다.
void handle() {
#ifdef COMPILE_FOR_COMPONENT_A
componentA->executeFunctionABC();
#endif
}
을하지만 추한 외모 :
지금과 같이 사전 처리기 사용하여이 문제를 해결할 수 있습니다. 이 작업을 올바르게 수행 할 수있는 디자인 패턴이 있는지 궁금합니다.
하지만 하위 클래스 중 하나에서 호출 될 모든 함수를 나열하는 Component 기본 클래스가 필요합니까? – Jeremy
@ Jeremy : 귀하의 의견은 귀하의 구성 요소가 서로 매우 다른 것을 제안합니다. 다른 솔루션에 대한 편집을 참조하십시오. – casablanca
두 번째 솔루션은 4 가지 구성 요소로만 구성됩니다. 한 가지 질문은 메시지 A로 구성 요소 A를 컴파일 할 때 ComponentB.o를 링크해야한다는 것입니다. 맞습니까? 전처리 방법을 사용하면 구성 요소를 완전히 분리 할 수 있습니다. – Jeremy