2013-05-28 75 views
0

我有其管理方法指針的類:基類被專門衍生

template<class C> 
class Prioritizer { 
    public: 
    typedef int (C::*FNMETHOD) (); 
    typedef std::map<unsigned int, std::vector<FNMETHOD> > methlist; 

    // associate priority values with methods 
    virtual void setPrio(unsigned int iPrio, FNMETHOD f); 

    // call all methods for given priority 
    virtual void execPrio(C *pC, int iPrio); 
} 

方法execPrio()需要一個指向到該方法指針,以便屬於 類調用這個方法

FNMETHOD f = ...; 
(pC->*f)(); 

現在我有一個基類擁有這樣一個Prioritizer對象。但是這個對象只能專門用於派生類(否則我只能使用基類的方法)。 最後,我希望能夠有一個從Base派生的類的集合(例如向量),並調用由它們的Prioritizer對象組織的方法。

我想出的最好的是這樣的:

template<class C> 
class Base { 
    public: 
    // ... other stuff ... 
    Prioritizer<C> m_prio; 
} 

class Der1 : public Base<Der1> { 
    public: 
    virtual int testDer1(); 
    int init() { 
     m_prio->setPrio(7, testDer1); 
    }; 
} 

對我來說似乎尷尬專門的模板與類一個是關於定義...

有沒有更好的辦法?

謝謝 喬迪

回答

1

可以存儲std::function<int(void)>對象或它的升壓模擬在地圖中。將其傳遞給setPrio函數時,將任何具體metod綁定到該函數對象。

+0

謝謝!我花了一段時間才發現我必須使用std :: bind,但現在它可以工作了! – user1479670