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;