Haftalık C++ 5 – std::invoke

Merhaba sevgili yazılımperver dostlarım. Yine bir haftalık C++ yazısı ile sizlerle birlikteyim. Bu yazımda sizler ile birlikte C++ 17 ile birlikte sunulmaya başlanan std::invoke() metoduna bir göz atacağız.

std::invoke() metodu <functional> kütüphanesi ile sunulmakta. Bu metot sayesinde farklı çağrılabilir nesneler (serbest fonksiyon işaretçileri, sınıf metodu işaretçileri, lambda metotları, fonksiyon nesneler), tek bir mekanizma ile çağrılabilecek. Bu sayede metot çağrılma mekanizması daha esnek ve standart bir şekilde gerçekleştirilebilecek. Peki bunları normalde nasıl yapıyorduk aşağıdaki kod örneğinde bunları görebilirsiniz.

Yukarıdaki örnek kodta da görebileceğiniz üzere normal metotlar için geleneksel yöntem çok karmaşık olmasa da, özellikle sınıf üye metot işaretçileri işin içine girince karmaşıklık artıyor. Bunların yanında hem normal fonksiyon işaretçileri hem de sınıf metot işaretçileri ile çalışma ihtiyacınız olduğu durumda, her iki işi de kotarabilecek, basit ve anlaşılır bir arayüz sunuluyor.

Sizlerin de anlayacağı üzere, aslında bu metodun sunduğu yeteneği bir şekilde mevcut mekanizmalar ile (ilgili cpp referans sayfasında örneği var) gerçekleştirebiliyoruz. Tabiki bu std::invoke() kadar anlaşılabilir ve basit görünmüyor 🙂

Aşağıda bu metodun kullanımı ile ilgili referans kaynakta verilen örneği görebilirsiniz. Örnek içerisinde std::invoke()‘un kullanılabileceği olası durumlar güzel bir şekilde özetlenmiş.

Yukarıdaki örneğe benzer bir şekilde özellikle “observer” ya da “callback” ya da “signal/slot” gibi mekanizmalar için de kullanışlı olabilir.

Kaynaklar:

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.