函数对象functor的简介与用法

来源:互联网 发布:瑞达纸箱软件 编辑:程序博客网 时间:2024/04/29 17:28
²尽管函数指针被广泛用于实现函数回调,但C++还提供了一个重要的实现回调函数的方法,那就是函数对象。
²functor,翻译成函数对象,伪函数,算符,是重载了“()”操作符的普通类对象。从语法上讲,它与普通函数行为类似
²greater<>与less<>就是函数对象。
²下面举出greater<int>的简易实现原理。
struct greater
{
bool operator() (const int& iLeft, const int& iRight)
{
       return (iLeft>iRight);          //如果是实现less<int>的话,这边                                                                                             //是写return (iLeft<iRight);
}
}
容器就是调用函数对象的operator()方法去比较两个值的大小

题目:学生包含学号,姓名属性,现要求任意插入几个学生对象到set容器中,使得容器中的学生按学号的升序排序
//学生类
class CStudent
{
public:
CStudent(int iID, string strName)
{
m_iID = iID;
m_strName = strName;
}
     int m_iID; //学号
     string m_strName; //姓名
}
//为保持主题鲜明,本类不写拷贝构造函数,但大家仍要有考虑拷贝构造函数的习惯
//函数对象
struct StuFunctor
{
bool operator()  (const CStudent &stu1, const CStudent &stu2)
{
return (stu1.m_iID<stu2.m_iID);
}
}
//main函数
void main()
{
set<CStudent, StuFunctor> setStu;
setStu.insert(CStudent(3,"小张"));
setStu.insert(CStudent(1,"小李"));
setStu.insert(CStudent(5,"小王"));
setStu.insert(CStudent(2,"小刘"));
//此时容器setStu包含了四个学生对象,分别是按姓名顺序的“小李”,“小刘”,“小张”,“小王”
}