C++ ‘da fonksiyonel programlama : F(a)(b)(c)

C++ ile fonksiyonel programlamanın olayını kavramak adına . a+b+c işlemini döndürecek olan f (a) (b) (c) methodlarını yapmaya çalışalım.

F fonksiyonu, operator() den nesneyi döndürerek yapabilirsiniz. İşte bunu yapmanın bir yolu:

Kullanımı

 

Diğer bir yol Template versiyonu : Derleyicinin türe ait olmasına izin verecek bir şablonlu sürüm bile yazabilirsiniz. (Tür belirleme süreci şablon işlemlerindeki gibi yürütülmektedir. (Eğer bu sürecin ayrıntılarıyla ilgileniyorsanız standartlarda belirtilen Template Argument Deduction işlemlerini incelemelisiniz.) )

Denemesi bedava.

 

 

İşte biraz farklı bir yaklaşım, *this this operatorden bir referansı döndürür, dolayısıyla aktarılan kopyalarınız yoktur. Recursive olarak kendisine depolayan bir funktor‘un çok basit bir uygulamasıdır.

 

Bunu yapmanın en kolay başka bir  yolu, plus2()  ile ilgili olarak plus3() tanımlamaktır.

Bu, ilk iki argüman listesini plus2()’yi  çağırmak için kullanılan tek bir arglist’e birleştirir.

Bunu yapmak, önceden var olan kodumuzu en az tekrarlama ile tekrar kullanmamıza izin verir ve gelecekte kolaylıkla genişletilebilir; PlusN() sadece plusN(1) çağıran bir lambda döndürmelidir, plus2()’ye ulaşana kadar çağrıyı önceki işleve sırayla geçirecektir.

Bu şekilde kullanılabilir:

Bunu kolayca ek fonksiyonlar için oluşturmamız gereken bir template function haline getirebiliriz.