首頁 > 程式設計 > [C++] 仿函數 Functor

[C++] 仿函數 Functor

與小強在討論list.sort()的時候(見如下程式碼)

#include <iostream>
#include <list>
using namespace std;

struct structB
{
    int x;
};

typedef structB STRUCT_B;

bool compare(STRUCT_B & a, STRUCT_B & b)
{
    return a.x < b.x;
}

class A
{
    public:
        STRUCT_B m_ID;
        void method()
        {
            list<STRUCT_B> MyList;
            MyList.sort(compare);
        }
};

int main(int argc, char * argv[])
{
    A MyObjA;
    MyObjA.method();
    return 0;
}

發現sort()裡面的compare 函數可以有更多型式,如下程式:

#include <iostream>
#include <list>
using namespace std;

struct structB
{
    int x;
};

typedef structB STRUCT_B;

class compare
{
    public:
        bool operator()(STRUCT_B & a ,STRUCT_B & b)
        {
            return a.x < b.x;
        }
};

class A
{
    public:
        STRUCT_B m_ID;
        void method()
        {
            list<STRUCT_B> MyList;
            MyList.sort(compare());
        }
};

int main(int argc, char * argv[])
{
    A MyObjA;
    MyObjA.method();
    return 0;
}

便對於operator() 這個東西感到好奇。就上網搜尋了一下,找到這一篇精細的講解:

C++ 仿函数(Functor)

大意是講說 functor 把class或structure 當成一般函數來處理,所以才可以有這種特殊的寫法。
這篇文章中,也對於Functor的優缺點做了精闢的分析,有興趣的讀者可以前往觀看。
另外,再補上國外一個關於Functor的教學:
分類:程式設計 標籤:
  1. 仍無迴響。
  1. No trackbacks yet.

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

%d 位部落客按了讚: