2014-11-24 157 views
1

好的,通常当我使用命令模式时,我通过构造函数传入参数。但是,我目前的设计并不真的允许。是的原因是,我从启动一个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

在运行时要做到这一点的唯一方法是均匀传递参数调用时,你可以使用一个

std::unordered_map<std::string, boost::any>或作为唯一的参数相似。每个参数都会有一个名称,您必须将any转换回原始类型。