读书人

STL中list容器的remove_if 参数有关问

发布时间: 2014-01-12 00:03:16 作者: rapoo

STL中list容器的remove_if 参数问题


class A{
public:
bool func1(int a){
return a>1;
}
};
bool func2(int a){
return a < 0;
}
typedef bool(A::*cpb)(int);
int main(){
list<int> c1(3);

c1.push_back(4);
c1.push_back(5);

c1.remove_if(func2); //可以
c1.remove_if(&A::func1); //出错 error C2064: 项不会计算为接受 1 个参数的函数

A a;
cpb funP = &A::func1;
c1.remove_if(&A::func1); //出错 指向绑定函数的指针只能用于调用函数
}


remove_if 的参数可以使用重载了()操作符的对象,调用类中的比较方法。如果我想直接传入一个类A中的一个func1指针,这样的话可以实现吗?

[解决办法]
让func1成为static就行了吧
[解决办法]

class A{
public:
bool operator()(int a)
{
return a>1;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
list<int> c1(3);

c1.push_back(4);
c1.push_back(5);
c1.remove_if(A());
return 0;
}

[解决办法]
class A
{
bool fun1(int a)
{
return a > 2;
}
};

class B
{
public:
bool operator ()(int a)
{
return a > 2;
}
};

bool fun2(int a)
{
return a > 2;
}

int main()
{

list<int> l(3);
l.push_back(1);
l.push_back(2);
l.push_back(3);
l.remove_if(fun2);
B b;
l.remove_if(b);
getchar();
}

读书人网 >C++

热点推荐