【发布时间】:2015-12-17 10:49:57
【问题描述】:
考虑以下几点:
class A
{
public:
bool is_odd(int i)
{
return (i % 2) != 0;
}
void fun()
{
std::vector<int> v2;
v2.push_back(4);
v2.push_back(5);
v2.push_back(6);
// fails here
v2.erase(std::remove_if(v2.begin(), v2.end(), std::not1(std::ptr_fun(is_odd))), v2.end());
}
};
上面的代码无法否定is_odd()的效果,因为它是一个成员函数。对std::ptr_fun() 的调用失败。
如何让它发挥作用?请注意,我希望 is_odd() 成为非静态成员函数。
【问题讨论】:
-
将
is_odd设为静态函数?还是非成员函数?没有理由它应该是一个成员函数。 -
@HappyCoder:那就让它成为一个静态成员函数。
-
你可以自己编写一个 like
[this](int n){return is_odd(n);}类型的函子类并使用它。 -
@KerrekSB 请注意,
is_odd()已经是我课程的一部分。如果我创建一个仿函数类并执行!is_odd(),我需要A的对象。如果没有,那就是代码重复(is_odd只是一个例子,实际代码实际上是巨大的) -
使用仿函数实现
A::is_odd,从而避免代码重复。