首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2014-01-12 
STL中list容器的remove_if 参数问题class A{public:bool func1(int a){return a1}}bool func2(int a){r

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();
}

热点排行