我希望能够接受一个Message&
引用 aMessage1
或Message2
class 的对象。我希望能够创建一个MessageWithData<Message1>
或MessageWithData<Message2>
基于Message&
对象的底层类型。例如,见下文:
class Message {};
class Message1 : public Message {};
class Message2 : public Message {};
template<typename Message1or2>
class MessageWithData : public Message1or2 { public: int x, y; }
class Handler()
{
public:
void process(const Message& message, int x, int y)
{
// create object messageWithData whose type is
// either a MessageWithData<Message1> or a MessageWithData<Message2>
// based on message's type.. how do I do this?
//
messageWithData.dispatch(...)
}
};
messageWithData 类本质上包含从 Message 继承的方法,这些方法允许根据其类型动态地将其双重分派回处理程序。到目前为止,我最好的解决方案是将数据与消息类型分开,并一直通过动态调度链传递它,但我希望更接近动态双重调度的真正习惯,其中消息类型包含可变数据。
(我或多或少遵循的方法来自http://jogear.net/dynamic-double-dispatch-and-templates)