@ltlovezh
2020-04-08T21:43:35.000000Z
字数 859
阅读 948
C++
可调用对象
:对于一个对象或者表达式,如果可以对其使用调用运算符(()
),则称为可调用对象。即若e是一个可调用对象,那么可以通过e(args)
进行调用,其中args是参数列表。
可调用对象:
operator()
)的类相同函数签名(相同的参数列表和返回类型)的不同可调用对象可以用一个std::function
类型表示。
例如:
// 函数
int add(int a, int b) {
return a + b;
}
// 重载了函数调用符的函数对象
class Subtract {
public:
// 求差
int operator()(int value1, int value2) {
return value1 - value2;
}
};
// 不同类型的函数对象,具有相同的std::function类型
std::function<int(int, int)> func = add;
func = Subtract();
func = [](int a, int b) { return a * b; };
operator()
)的类如果类重载了函数调用运算符(operator()
),则该类的对象称作函数对象
,我们可以像使用函数一样使用函数对象
。
class FunctionObject {
public:
// 取绝对值
int operator()(int value) {
return value >= 0 ? value : -value;
}
// 求和
int operator()(int value1, int value2) {
return value1 + value2;
}
};
int main() {
FunctionObject functionObject;
// 调用函数对象,输出为1
std::cout << functionObject(-1) << std::endl;
// 调用函数对象,输出为2
std::cout << functionObject(1, 1) << std::endl;
}
lambda表达式会被编译器编译成函数对象。