[关闭]
@ltlovezh 2020-04-08T13:43:35.000000Z 字数 859 阅读 857

C++可调用对象

C++


可调用对象:对于一个对象或者表达式,如果可以对其使用调用运算符(()),则称为可调用对象。即若e是一个可调用对象,那么可以通过e(args)进行调用,其中args是参数列表。

可调用对象:

相同函数签名(相同的参数列表和返回类型)的不同可调用对象可以用一个std::function类型表示。

例如:

  1. // 函数
  2. int add(int a, int b) {
  3. return a + b;
  4. }
  5. // 重载了函数调用符的函数对象
  6. class Subtract {
  7. public:
  8. // 求差
  9. int operator()(int value1, int value2) {
  10. return value1 - value2;
  11. }
  12. };
  13. // 不同类型的函数对象,具有相同的std::function类型
  14. std::function<int(int, int)> func = add;
  15. func = Subtract();
  16. func = [](int a, int b) { return a * b; };

重载函数调用运算符(operator())的类

如果类重载了函数调用运算符(operator()),则该类的对象称作函数对象,我们可以像使用函数一样使用函数对象

  1. class FunctionObject {
  2. public:
  3. // 取绝对值
  4. int operator()(int value) {
  5. return value >= 0 ? value : -value;
  6. }
  7. // 求和
  8. int operator()(int value1, int value2) {
  9. return value1 + value2;
  10. }
  11. };
  12. int main() {
  13. FunctionObject functionObject;
  14. // 调用函数对象,输出为1
  15. std::cout << functionObject(-1) << std::endl;
  16. // 调用函数对象,输出为2
  17. std::cout << functionObject(1, 1) << std::endl;
  18. }

lambda

lambda表达式会被编译器编译成函数对象。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注