2015-06-04 75 views
0

對象的比較指針我有以下主題-觀測器設計設計沒有數據成員

template<typename Data> 
struct Observor{ 
    Observor() 
    { 
    } 

    virtual void process(Data data) = 0; 
}; 

template <typename Data> 
class Subject 
{ 
    public: 

    void addObservor(Observor<Data>* observor) 
    { 
     _observors.insert(observor); 
    } 

    void removeObservor(Observor<Data>* observor) 
    { 
     boost::unordered_set<Observor<Data> * > ::iterator itr = 
     _observors.find(observor); 

     if(itr != _observors.end()) 
     { 
     _observors.erase(observor); 
     } 
    } 
    protected: 

    boost::unordered_set<Observor<Data>* > _observors; 
}; 

在上面的代碼中,觀測器設計類是由希望註冊到主題的所有類繼承。在函數removeObservor中,當我嘗試創建迭代器時,出現編譯錯誤。建議給我的解決方案是實現一個比較器(即<)。 Observor類然而沒有數據成員。我的比較器的基礎是什麼?

我想到的解決方案是使用每個觀察者派生類(即Derived1,Derived2)的typeid。但是,此解決方案僅適用於集合中只存在每個派生類的一個對象。因爲我可能有多個相同對象類型的實例,所以我被困在如何繼續

+4

咦?你在比較指針。爲此,您不必執行任何操作。發佈未更改的錯誤消息。 –

回答

1

我猜錯誤是iterator是一個相關的類型名稱。 將typename添加到迭代器變量delcaration的前面,或者甚至更好地使用auto

例如,

typename boost::unordered_set<Observor<Data> * > ::iterator itr = 
    _observors.find(observor); 

auto itr = _observors.find(observor);