我不能完全理解 operator() 在类中是如何工作的,以及原则上它与方法有何不同。
也就是说,有什么区别
class ManOlderThan
{
int m_age;
public:
ManOlderThan( int age )
{
m_age = age;
};
bool operator()( Man &man )
{
if( man.GetAge() > m_age ) {
return true;
}
else {
return false;
}
};
};
class ManOlderThan
{
int m_age;
public:
ManOlderThan( int age )
{
m_age = age;
};
bool compare( Man &man )
{
if( man.GetAge() > m_age ) {
return true;
}
else {
return false;
}
};
};
那怎么调用呢?或者当只有一种方法时是否需要操作员?或者它们是完全不同的东西?
通常,在这种情况下,运算符在向量和 for_each 和 find_if 的上下文中被考虑
许多算法使用函数对象来处理序列的元素。这些功能对象可以是具有函数运算符的函数或类。函数和类的调用语法——功能对象看起来是一样的。这允许您编写通用代码。类的优点 - 功能对象就是这样。它们允许您存储状态,以及使用除调用参数之外的其他数据字段。
请参阅下面的演示程序,该程序可查找年龄大于给定年龄的人。从示例中可以看出,使用函数函数运算符而不是调用类成员函数要简单得多,并且函数对象可以存储额外的信息——在本例中为值 35。
将程序输出到控制台
也就是说,程序会在向量给出的 35 岁以上的人列表中寻找第一个人。