2011-01-12 61 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'成员关联起来。 –

相关问题