請原諒我,如果這之前已經問過,我只是無法找到一個合適的解決方案。什麼是最簡潔的方法來比較成員函數調用的結果
我經常發現自己創建一個類的成員函數函子像下面這樣使用find_if或的remove_if之後
class by_id{
public:
by_id(int id):mId(id) {}
template <class T>
bool operator()(T const& rX) const { return rX.getId() == mId; }
template <class T>
bool operator()(T* const pX) const { return (*this)(*pX); }
private:
int mId;
};
雖然這工作得很好它含有大量的樣板和手段來定義一個類我想用來比較每個成員函數。
我知道C++ 11中的lambdas,但由於交叉編譯器的限制,我無法切換到新的標準。
我發現的最接近的相關問題是stl remove_if with class member function result,但給定的解決方案意味着添加額外的成員函數進行比較,這很醜陋。
使用標準STL還是沒有更簡單的方法,或者可以使用更通用的方式編寫這樣的函數,或者使用bind來完全跳過它們?
像通用仿函數一樣會做,但我缺乏寫它的技巧。 只是爲了清楚我的想法:
template<typename FP,typename COMP>
class by_id{
public:
by_id(COMP id):mId(id) {}
template <class T>
bool operator()(T const& rX) const { return rX.FP() == mId; }
//of course this does not work
template <class T>
bool operator()(T* const pX) const { return (*this)(*pX); }
private:
COMP mId;
};
再次感謝您的寶貴意見代替
boost::bind
。那正是我所期待的。爲什麼這樣的事情不是某個圖書館的一部分,它似乎非常方便。 – Martin