好奇怪的东西

定义

若一个类重载了()运算符,那么该类的对象就成为了函数对象,举个例子:

class CMyAverage{
    public:
        double operator() (int a1, int a2, int a3){
            return (double)(a1+a2+a3) / 3;
        }
};

CMyAverage average;

int main() {
    cout << average(3,2,3) << endl;
}
别忘了实例化

2020/4/16更新
好像不用实例化....

例子

  1. 累加

    class CMyAvccumulate{
        public:
            template<class T1, class T2, class T3=function<int(int,int)>>
            void operator() (T1* a, T1* b, T2* c, T3 op=[](int a, int b){return a+b;}){
                for(auto i = a; i!=b; ++i){
                    *c = op(*c,*i);
                }
            }
    };
    
    CMyAvccumulate acc;
    
    int main() {
        int a[] = {1,2,3,4,5};
        int b = 0;
        acc(a,a+5,&b);
        cout << b << endl;
    }

本质

在C++11后,只要是有()操作的,编译器就会将其转换成函数来实现。

一般情况下有这四种情况

  • 函数指针
  • lambda类
  • function<>类
  • 函数模板类
Last modification:April 16th, 2020 at 01:19 pm
Compared with money, your comment could inspire me more.
相较于钱财,你的留言更能激发我创作的灵感