2014-11-24 303 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轉換回原始類型。