将参数传递给命令模式

时间:2014-11-24 07:13:09

标签: c++ xml factory

好的,通常当我使用命令模式时,我通过构造函数传递参数。但是,我目前的设计并不能真正实现这一点。原因是我在启动时从xml文件加载数据,所以我可能会这样:

<Actor>
    <InputComponent>
        <Mapping Type="Drag" Key=1 Command="MoveCommand"/>
        <Mapping Type="Press" Key=16 Command="FillerCommand"/>
        <Mapping Type="Click" Key=2 Command="FillerCommand"/>
    </InputComponent>
</Actor>

因为它们以字符串形式读入,所以它们被传递给命令工厂对象,然后创建正确的命令对象并将其移回输入组件。这意味着我无法访问它们,因为它们是构造的,因此无法通过构造函数指定特殊参数。我可以通过一个指向Execute成员函数的void指针传递这个额外的信息,但这是非常不安全的。我还可以将XML元素传递给命令工厂,并让它们从更多的xml属性(当前方法)初始化,但它仍然感觉像是一个黑客解决方案。任何建议都会受到欢迎。

1 个答案:

答案 0 :(得分:1)

在运行时执行此操作的唯一方法是在调用时统一传递参数,您可以使用

std::unordered_map<std::string, boost::any>或与单个参数类似。每个参数都有一个名称,您必须将any强制转换为原始类型。