C++ 函數(shù)對(duì)象(也稱(chēng)為仿函數(shù)或functor)是一種具有成員函數(shù)調(diào)用操作符(operator())的對(duì)象。它們可以像函數(shù)一樣被調(diào)用,并且可以攜帶狀態(tài)(即成員變量)。C++ 函數(shù)對(duì)象支持以下操作:
class MyFunctor {
public:
MyFunctor(int x) : value(x) {}
~MyFunctor() {}
private:
int value;
};
operator()
以便像函數(shù)一樣被調(diào)用。class MyFunctor {
public:
int operator()(int y) const {
return value * y;
}
private:
int value;
};
const
成員函數(shù)調(diào)用操作符。class MyFunctor {
public:
int operator()(int y) const {
return value * y;
}
private:
int value;
};
+
、-
、*
等,以實(shí)現(xiàn)更高級(jí)別的抽象和操作。class MyFunctor {
public:
int value;
MyFunctor operator+(const MyFunctor& other) const {
return MyFunctor(value + other.value);
}
};
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)景中非常有用。