C++仿函数

在 C++ 中,仿函数是一种可以像函数一样调用的对象。

通过实现 operator(),你可以创建一个类或结构体,然后像函数一样使用它,这就是仿函数的概念。

 

当我们谈到仿函数时,通常是指定义了函数调用运算符 operator() 的类或结构体。

以下是两个简单的 C++ 仿函数示例,一个用于比较整数大小,另一个用于字符串长度比较:

 

比较整数大小的仿函数:

#include <iostream>

class CompareIntegers {
public:
    bool operator()(int a, int b) const {
        return a < b;
    }
};

int main() {
    CompareIntegers compare;

    // 使用仿函数进行比较
    if (compare(3, 5)) {
        std::cout << "3 is less than 5" << std::endl;
    } else {
        std::cout << "3 is not less than 5" << std::endl;
    }

    return 0;
}

 

 

 

扩展:

仿函数在容器里面用作比较函数

下面是代码片段:

// 这里只是代码片段,用来学习和理解仿函数的概念和使用

class TimerManager;
class Timer : public std::enable_shared_from_this<Timer>{
friend class TimerManager;
public:
    typedef std::shared_ptr<Timer> ptr;
private:
    Timer(uint64_t ms, std::function<void()> cb,
          bool recurring, TimerManager* manager);
private:
    bool m_recurring = false;    //是否寻喊定时器
    uint64_t m_ms = 0;           //执行周期
    uint64_t m_next = 0;         //精确的执行时间
private:
    // operator() 这是仿函数的用法。
    struct Comparator{
        bool operator()(const Timer::ptr& lhs, const Timer::ptr& rhs)const;
    };
};

// 定义容器变量,仿函数作为比较函数传递进去。
  std::set<Timer::ptr, Timer::Comparator> m_timers;

 

posted @ 2024-01-12 13:52  He_LiangLiang  阅读(53)  评论(0编辑  收藏  举报