C++ 函数对象(也称为仿函数或functor)是一种具有成员函数调用操作符(operator())的对象。它们可以像函数一样被调用,并且可以携带状态(即成员变量)。C++ 函数对象支持以下操作:
class MyFunctor {
public:
MyFunctor(int x) : value(x) {}
~MyFunctor() {}
private:
int value;
};
operator()
以便像函数一样被调用。class MyFunctor {
public:
int operator()(int y) const {
return value * y;
}
private:
int value;
};
const
成员函数调用操作符。class MyFunctor {
public:
int operator()(int y) const {
return value * y;
}
private:
int value;
};
+
、-
、*
等,以实现更高级别的抽象和操作。class MyFunctor {
public:
int value;
MyFunctor operator+(const MyFunctor& other) const {
return MyFunctor(value + other.value);
}
};
std::function
模板类,它可以存储任何可调用目标(包括函数、函数指针、成员函数指针、Lambda 表达式等)。这使得函数对象可以与标准库中的算法和其他组件一起使用。#include <iostream>
#include <functional>
int main() {
MyFunctor f(5);
std::function<int(int)> func = f;
std::cout << func(3) << std::endl; // 输出 15
return 0;
}
总之,C++ 函数对象提供了丰富的操作,使得它们在实现回调函数、算法和其他需要可调用对象的场景中非常有用。