我正在查看从另一个 SO 帖子中获得的以下示例。示例是这样的
class checker
{
public:
bool operator()(unsigned int i)
{
if (i%2 == 0)
{
return true; --------------->Statement A
}
return false;
}
};
std::vector<int> vec;
vec.push_back(3);
vec.push_back(5);
vec.push_back(2);
if(std::find_if(vec.begin(), vec.end(), checker()) != vec.end())
{
std::cout << "Found";
}
现在我对上面的例子有三个问题:
Q1- find_if 的第三个参数接受一个 predicate 。这里我使用的是仿函数对象。该谓词假设是指针(地址)还是对象。在这里,我传递了一个对象,但是在这个示例中,它在msdn上传递了一个地址。我意识到在那个例子中谓词不是一个类的成员方法。但是,如果有人可以在这里澄清谓词参数的要求,我仍然会很感激。因为如果它可以接受函数指针,那么这不起作用
bool (checker::*aptr)(unsigned int) = NULL; //Function ptr of class method
aptr = &(checker::operator());
if(std::find_if(vec.begin(), vec.end(), aptr) != vec.end()){...};
Q2-尽管上面的示例工作正常,但是当我在语句 A 处设置断点时,断点永远不会被命中,并且假设它返回 true。澄清这一点会有所帮助。
Q3-一些例子从std::unary_function<key_struct, bool>
What is the reason for that中派生了struct /class。上面的课程对我来说效果很好。为什么需要从中派生它std::unary_function<key_struct, bool>
?