Message クラスと Processor クラスの階層があります。各プロセッサは、1 つ以上のメッセージをオンザフライで受信できます。各メッセージはいくつかの異なる属性を持つ可能性があるため、実際に処理するために、そのメッセージを具体的なメッセージ クラスにダウンキャストする必要があります。
ないので。メッセージ クラスとプロセス クラスの代わりに、dynamic_cast を使用したくありません。
次のコードを使用しようとしましたが、コンパイル時にエラーが発生しています。また、(必要に応じて) プロセッサ ポインタをメッセージに添付する柔軟性がありますが、その逆はできません。
class Message
{
public:
virtual const Message* const getMessage() const = 0;
};
class MA : public Message
{
public:
const MA* const getMessage() const {return this;}
void printMA() const{std::cout<<"I am MA"<<std::endl;}
};
class MB : public Message
{
public:
const MB* const getMessage() const {return this;}
void printMB() const{std::cout<<"I am MB"<<std::endl;}
};
class Processor
{
public:
virtual void process(const Message* m) = 0;
};
class PA : public Processor
{
public:
void process(const Message* m) {processM(m->getMessage());}
void processM(const MA* m) {m->printMA();}
void processM(const MB* m) {m->printMB();}
};
int main()
{
Message* m1 = new MA();
Message* m2 = new MB();
Processor* p1 = new PA();
p1->process(m1);
p1->process(m2);
return 0;
}