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 lurus. 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 operator jenis dan terapkan(), seperti:

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

int main()
{
    Functor f;
    int a = 5;
    int b = 7;
    int ans = f(a, b);
}

Baris main terakhir fungsi menunjukkan cara Anda memanggil objek fungsi. Panggilan ini terlihat seperti panggilan ke fungsi, tetapi sebenarnya memanggil operator() dari jenis Functor. 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 Traits=less<Key>,
    class Allocator=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 dari objek fungsional adalah dalam algoritma. Misalnya, remove_if algoritma dinyatakan sebagai berikut:

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

Argumen terakhir adalah remove_if objek fungsi yang mengembalikan nilai boolean ( predikat). Jika hasil objek fungsi adalah true, maka elemen dihapus dari kontainer yang diakses oleh iterator first dan last. Anda dapat menggunakan salah satu objek fungsi yang dideklarasikan di <functional> header untuk argumen pred atau Anda dapat membuat objek anda sendiri.

Baca juga

Referensi pustaka standar C++