Bagikan melalui


Objek Fungsi di Pustaka Standar C++

Objek fungsi, atau funktor, adalah jenis apa pun yang mengimplementasikan operator(). Operator ini disebut sebagai operator panggilan atau terkadang operator aplikasi. Pustaka Standar C++ menggunakan objek fungsi terutama sebagai kriteria pengurutan untuk kontainer dan dalam algoritma.

Objek fungsi memberikan dua keuntungan utama daripada panggilan fungsi reguler. Yang pertama adalah bahwa objek fungsi dapat berisi status. Yang kedua adalah bahwa objek fungsi adalah jenis dan oleh karena itu dapat digunakan sebagai parameter templat.

Membuat Objek Fungsi

Untuk membuat objek fungsi, buat jenis dan terapkan operator(), seperti:

class LessThanFunctor
{
public:
    bool operator()(int a, int b)
    {
        return a < b;
    }
};

int main()
{
    LessThanFunctor less_than;
    int a = 5;
    int b = 7;
    bool ans = less_than(a, b);
}

Baris main terakhir fungsi menunjukkan cara Anda memanggil objek fungsi. Panggilan ini terlihat seperti panggilan ke fungsi, tetapi sebenarnya memanggil operator() jenis tersebut LessThanFunctor . Kesamaan antara memanggil objek fungsi dan fungsi adalah bagaimana objek fungsi istilah muncul.

Objek fungsi dan Kontainer

Pustaka Standar C++ berisi beberapa objek fungsi dalam <functional> file header. Salah satu penggunaan objek fungsi ini adalah sebagai kriteria pengurutan untuk kontainer. Misalnya, set kontainer dinyatakan sebagai berikut:

template <class Key,
    class Compare = std::less<Key>,
    class Allocator = std::allocator<Key>>
class set;

Argumen templat kedua adalah objek lessfungsi . Objek fungsi ini mengembalikan true jika parameter pertama kurang dari parameter kedua. Karena beberapa kontainer mengurutkan elemennya, kontainer membutuhkan cara untuk membandingkan dua elemen. Perbandingan dilakukan dengan menggunakan objek fungsi. Anda dapat menentukan kriteria pengurutan Anda sendiri untuk kontainer dengan membuat objek fungsi dan menentukannya dalam daftar templat untuk kontainer.

Objek fungsi dan Algoritma

Penggunaan lain objek fungsi ada dalam algoritma. Misalnya, remove_if algoritma dinyatakan sebagai berikut:

template <class ForwardIterator, class UnaryPredicate>
ForwardIterator remove_if(
    ForwardIterator first,
    ForwardIterator last,
    UnaryPredicate pred);

Argumen terakhir adalah remove_if objek fungsi yang mengembalikan nilai boolean ( predikat). Jika hasil objek fungsi adalah true, maka elemen digeser sedih sehingga berada di luar akhir baru yang dikembalikan oleh remove_if. Anda dapat menggunakan salah satu objek fungsi yang dideklarasikan di <functional> header untuk argumen pred atau Anda dapat membuat objek anda sendiri.

Lihat juga

Referensi pustaka standar C++