2011-01-12 86 views
2

我試圖在find_if表達式中訪問嵌套類成員函數使用boost bind來訪問內部類的成員函數

我的代碼如下在bind表達式中導致編譯錯誤 - ('COuter :: innerClass'不是類或名稱空間)。

你能幫助我正確的綁定表達?

vector<COuter> vec; 

vec.push_back(COuter()); 

vector<COuter>::const_iterator it = 
    find_if(vec.begin(), vec.end(), bind(&COuter::innerClass::GetTemp, _1) == 42); 

我的示例類:


class CInner 
{ 
public: 
    CInner() : _temp(42) {}; 

    int GetTemp() const 
    { 
     return _temp; 
    } 

private: 

    int _temp; 
}; 

class COuter 
{ 
public: 
    CInner innerClass; 
}; 

回答

3

正確表達是bind(&CInner::GetTemp, bind(&COuter::innerClass, _1))

+0

這裏有什麼額外的綁定?您應該只傳入對該成員的引用。 – CashCow

+0

@CashCow:你需要一個額外的綁定來遍歷額外的對象innerClass。它的工作方式與gcc-4.4一樣。 –

+1

@CashCow,所需的普通C++表達式是:vec [i] .innerClass.GetTemp()== 42'。 '_1'變量將引用'vec [i]',所以內部的'bind'表達式給了我們對'vec [i] .innerClass'的引用。外層的'bind'把我們的'GetTemp'成員關聯起來。 –

相關問題