[:tr]Haftalık C++ 5 – std::invoke[:en]Weekly C++ 5 – std::invoke[:]

[:tr]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:

[:en]Hello my dear yazılımperver friends. We are together again with another weekly C++ post. In this post, we are going to explore the std::invoke() method which is provided with C++ 17.

std::invoke() method is provided witjh <functional> library. Via this method all different kind of callable objects (such as free function pointers, class member function pointers, lambda functions and function objects) can be executed/called with same syntax. Thank to this method, generic function call can be perfomed in  a flexible and standard fashion. Before delving into details, let me summarize callable objects in C++ via sample code.

As you can see in the above sample code, although regular function pointer usage is not complex, the one used for class member functions become very complex. Moreover, if you required to work with both class member and regular function pointers then this new method will provide a simple and clear usage which is also possible before but not very simple and intuitive. This means that we can already achieve std::invoke() capability by existing mechanism (as illustrated in cpp referans sayfasında).

Below you can find the std::invoke() sample given in reference page which summarizes nicely all possible usages of this method.

Similar to above example, this method can also be used to implement “observer“, “callback“, “signal/slot” or similar mechanisms.

References:

[:]