c++

C++函数对象支持哪些操作

小樊
81
2024-10-30 16:15:25
栏目: 编程语言

C++ 函数对象(也称为仿函数或functor)是一种具有成员函数调用操作符(operator())的对象。它们可以像函数一样被调用,并且可以携带状态(即成员变量)。C++ 函数对象支持以下操作:

  1. 构造和析构:可以使用构造函数初始化函数对象的状态,析构函数用于清理资源。
class MyFunctor {
public:
    MyFunctor(int x) : value(x) {}
    ~MyFunctor() {}

private:
    int value;
};
  1. 成员函数调用操作符:函数对象必须重载 operator() 以便像函数一样被调用。
class MyFunctor {
public:
    int operator()(int y) const {
        return value * y;
    }

private:
    int value;
};
  1. const 成员函数调用操作符:如果函数对象的操作不应该修改对象的状态,可以重载 const 成员函数调用操作符。
class MyFunctor {
public:
    int operator()(int y) const {
        return value * y;
    }

private:
    int value;
};
  1. 重载其他运算符:可以根据需要重载其他运算符,例如 +-* 等,以实现更高级别的抽象和操作。
class MyFunctor {
public:
    int value;

    MyFunctor operator+(const MyFunctor& other) const {
        return MyFunctor(value + other.value);
    }
};
  1. 使用 std::function:C++11 引入了 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++ 函数对象提供了丰富的操作,使得它们在实现回调函数、算法和其他需要可调用对象的场景中非常有用。

0
看了该问题的人还看了