C++函數(shù)對(duì)象支持哪些操作

c++
小樊
81
2024-10-30 16:15:25

C++ 函數(shù)對(duì)象(也稱(chēng)為仿函數(shù)或functor)是一種具有成員函數(shù)調(diào)用操作符(operator())的對(duì)象。它們可以像函數(shù)一樣被調(diào)用,并且可以攜帶狀態(tài)(即成員變量)。C++ 函數(shù)對(duì)象支持以下操作:

  1. 構(gòu)造和析構(gòu):可以使用構(gòu)造函數(shù)初始化函數(shù)對(duì)象的狀態(tài),析構(gòu)函數(shù)用于清理資源。
class MyFunctor {
public:
    MyFunctor(int x) : value(x) {}
    ~MyFunctor() {}

private:
    int value;
};
  1. 成員函數(shù)調(diào)用操作符:函數(shù)對(duì)象必須重載 operator() 以便像函數(shù)一樣被調(diào)用。
class MyFunctor {
public:
    int operator()(int y) const {
        return value * y;
    }

private:
    int value;
};
  1. const 成員函數(shù)調(diào)用操作符:如果函數(shù)對(duì)象的操作不應(yīng)該修改對(duì)象的狀態(tài),可以重載 const 成員函數(shù)調(diào)用操作符。
class MyFunctor {
public:
    int operator()(int y) const {
        return value * y;
    }

private:
    int value;
};
  1. 重載其他運(yùn)算符:可以根據(jù)需要重載其他運(yùn)算符,例如 +-、* 等,以實(shí)現(xiàn)更高級(jí)別的抽象和操作。
class MyFunctor {
public:
    int value;

    MyFunctor operator+(const MyFunctor& other) const {
        return MyFunctor(value + other.value);
    }
};
  1. 使用 std::function:C++11 引入了 std::function 模板類(lèi),它可以存儲(chǔ)任何可調(diào)用目標(biāo)(包括函數(shù)、函數(shù)指針、成員函數(shù)指針、Lambda 表達(dá)式等)。這使得函數(shù)對(duì)象可以與標(biāo)準(zhǔn)庫(kù)中的算法和其他組件一起使用。
#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++ 函數(shù)對(duì)象提供了豐富的操作,使得它們?cè)趯?shí)現(xiàn)回調(diào)函數(shù)、算法和其他需要可調(diào)用對(duì)象的場(chǎng)景中非常有用。

0