9 Kasım 2018 Cuma

Variadic Template Unary Left Fold

Giriş
Her bir elemanı bir önceki sonuç ile çağır anlamına gelir.
Metodun imzasında ...,pack şeklinde kullanılır.

Kodda önce üç nokta daha sonra bir operator ve daha sonra bir işlem gelir.

Variadic Template Unary Right Fold yazısına da göz atabilirsiniz

Örnek
Elimizde şöyle bir kod olsun. Bu a ve b karakterlerinin days nesnesinin ilk iki karakteri ile aynı olup olmadığını döner.
template<typename ...Days>
bool any_of(char a, char b, Days ...days)
{
    return (... || (a == days[0] && b == days[1]));
}
Elimizde iki değişken olsun.
char dayOne, dayTwo = ...;
Şöyle yaparız
any_of(std::tolower(dayOne), std::tolower(dayTwo), "mo", "tu", "we", "th", "fr", "sa",
  "su")
Örnek
Şöyle yaparız
template<typename ...Args>
void output_argus(Args&&... args) 
{
    (cout << ... << args) << EOL;
}


int main()
{
    output_argus(1, "test", 5.6f);
}
Çıktı olarak şunu alırız.
1test5.6
Örnek
Şöyle yaparız
template<typename... Ts>
auto mean_of(const Ts... values)
{
    return ( (... + values) / static_cast<double>(sizeof...(Ts)) );
}
Çağırmak için şöyle yaparız.
std::cout << mean_of(1, 3);

Hiç yorum yok:

Yorum Gönder