c++ - 将参数传递给命令模式

标签 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 成员函数的空指针传递这些额外信息,但这是非常不安全的。我也可以将 XML 元素传递给命令工厂,并让它们从更多的 xml 属性(当前方法)初始化自己,但它仍然感觉像是一个 hack 解决方案。欢迎提出任何建议。

最佳答案

在运行时唯一的方法就是在调用时统一传递参数,你可以使用一个

std::unordered_map<std::string, boost::any>或类似于单个参数。每个参数都有一个名称,您将不得不回退 any到原始类型。

关于c++ - 将参数传递给命令模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27099594/

相关文章:

c++ - 是否有(足够快的)解决方法来乘以超出内存限制的矩阵?

c++ - 读取文件内容时读取未知符号

c++ - 我不认为这是类型转换,但它是什么?

sql - 使用 SQL Server 上另一个 XML 的节点更新 XML 列

c# - 编辑 Xml 文件时 SelectSingleNode 不工作

c++ - 从另一个模板类访问实例变量

C#类转XML(xmlserializaion)问题

c++ - 构造函数中的对象创建

c# - 桥接模式还是工厂模式?

java - 工厂方法如何返回接口(interface)和抽象类的实例?