Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
İşlev nesnesi veya functor, uygulayan operator()herhangi bir türüdür. Bu işleç çağrı işleci veya bazen uygulama işleci olarak adlandırılır. C++ Standart Kitaplığı, işlev nesnelerini öncelikle kapsayıcılar ve algoritmalar için sıralama ölçütleri olarak kullanır.
İşlev nesneleri, normal bir işlev çağrısına göre iki ana avantaj sağlar. Birincisi, bir işlev nesnesinin durum içerebileceğidir. İkincisi, işlev nesnesinin bir tür olmasıdır ve bu nedenle şablon parametresi olarak kullanılabilir.
İşlev Nesnesi Oluşturma
İşlev nesnesi oluşturmak için bir tür oluşturun ve aşağıdakiler gibi uygulayın operator():
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);
}
İşlevin main son satırında işlev nesnesini nasıl çağırdığınız gösterilir. Bu çağrı bir işlev çağrısı gibi görünür, ancak aslında türünden LessThanFunctor çağrıroperator(). İşlev nesnesini çağırma ile işlev arasındaki bu benzerlik, işlev nesnesi teriminin nasıl ortaya çıktığıdır.
İşlev Nesneleri ve Kapsayıcıları
C++ Standart Kitaplığı, üst bilgi dosyasında birkaç işlev nesnesi <functional> içerir. Bu işlev nesnelerinin bir kullanımı, kapsayıcılar için bir sıralama ölçütüdür. Örneğin, set kapsayıcı aşağıdaki gibi bildirilir:
template <class Key,
class Compare = std::less<Key>,
class Allocator = std::allocator<Key>>
class set;
İkinci şablon bağımsız değişkeni işlev nesnesidir less. İlk parametre ikinci parametreden küçükse bu işlev nesnesi döndürür true . Bazı kapsayıcılar öğelerini sıraladığından kapsayıcının iki öğeyi karşılaştırmak için bir yönteme ihtiyacı vardır. Karşılaştırma, işlev nesnesi kullanılarak yapılır. Bir işlev nesnesi oluşturup kapsayıcının şablon listesinde belirterek kapsayıcılar için kendi sıralama ölçütlerinizi tanımlayabilirsiniz.
İşlev Nesneleri ve Algoritmaları
İşlev nesnelerinin bir diğer kullanımı da algoritmalarda kullanılır. Örneğin, remove_if algoritma aşağıdaki gibi bildirilir:
template <class ForwardIterator, class UnaryPredicate>
ForwardIterator remove_if(
ForwardIterator first,
ForwardIterator last,
UnaryPredicate pred);
için son bağımsız değişkenremove_if, boole değeri (koşul) döndüren bir işlev nesnesidir. İşlev nesnesinin sonucu ise true, öğesi tarafından remove_ifdöndürülen yeni ucun ötesine geçecek şekilde kaydırılır. Bağımsız değişken için üst bilgide <functional> bildirilen işlev nesnelerinden herhangi birini kullanabilir veya kendi nesnenizi pred oluşturabilirsiniz.