2012-02-17 60 views
1

我有一個傳統的軟件,有一個單一的管理器,它控制程序的運行。它在整個程序的執行過程中調用各種回調類的方法。這些是用戶掛鉤。問題在於這1000個不同的掛鉤是 1)它們每個顯然都有不同的接口2)運行管理器只有一個插槽。包裝將回調傳遞到組件列表C++

我已經注意到,只允許用戶在運行管理器中註冊每個用戶掛鉤類的一個實例會導致我的組中有很多意大利麪代碼。我想編寫一個簡單的包裝器,其中包含一個鉤子列表,然後遍歷列表並調用每個實例的回調。例如:

class SomeLegacyUserActionClass 
{ 
public: 
    virtual void A(); 
    virtual void B(); 
}; 

class MyWrapper : public SomeLegacyUserActionClass 
{ 
    std::vector< SomeLegacyUserActionClass* > actionList; 
public: 
    void A() 
    { 
     // loop over each action in actionList 
     { 
      action->A(); 
     } 
    } 

    void B() 
    { 
     // loop over each action in actionList 
     { 
      action->B(); 
     } 
    } 

    void addAction(SomeLegacyUserActionClass* action) { ... } 
}; 

這已成爲非常繁瑣和醜陋做了很多課。有什麼方法可以讓我做一個模板課或一些事情來做到這一點一滴?這裏顯然有一種模式,我只是不知道我是否可以在C++中以某種方式利用它。

我想我可以讓我的團隊爲他們所有的行爲實現某種裝飾模式,並消除向量和循環。

感謝

回答

0

這是不可能的模板,因爲沒有方法來檢索的類型的模板使用成員函數列表。如果你真的有很多類,那麼使用經典的代碼生成可能是明智的。