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;
};
這裏有什麼額外的綁定?您應該只傳入對該成員的引用。 – CashCow
@CashCow:你需要一個額外的綁定來遍歷額外的對象innerClass。它的工作方式與gcc-4.4一樣。 –
@CashCow,所需的普通C++表達式是:vec [i] .innerClass.GetTemp()== 42'。 '_1'變量將引用'vec [i]',所以內部的'bind'表達式給了我們對'vec [i] .innerClass'的引用。外層的'bind'把我們的'GetTemp'成員關聯起來。 –