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 @   He_LiangLiang  阅读(54)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示