我有消息类和处理器类的雇佣关系。每个处理器都可以即时接收一条或多条消息。由于每条消息都可以有一些不同的属性,我必须将该消息向下转换为具体的消息类,以实际处理它。
因为没有。消息类和进程类,我不想使用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;
}