21 Şubat 2018 Çarşamba

Variadic Template

Giriş
Variadic Template C++11 ile gelen yeni bir özellik.

C ve C++ Variadic Function Farkı
C'de üç noktadan önce virgül gelir.
int f(int n, ...);
C++'ta gelse de olur gelmese de olur.
int f(int n...); // the comma has been omitted
Variadic Template Nasıl Tanımlanır.
class'tan sonra üç nokta, parametrelerden sonra üç nokta gelir.
Örnek
Şöyle yapılır. Variadic template ile variadic function farklı şeylerdir.
template <class... T> void f(T...); // function template with parameter pack
template <class T> void f(T...);    // variadic function
Örnek
Eğer istenirse T parametresinden sonra && işareti konulabilir.Açıklaması şöyle.
Don't let T&& fool you here - t is not an rvalue reference. When it appears in a type-deducing context, T&& acquires a special meaning. When func is instantiated, T depends on whether the argument passed to func is an lvalue or an rvalue. If it's an lvalue of type U, T is deduced to U&. If it's an rvalue, T is deduced to U:
Şöyle yaparız. Burada geçilen parametre tipine göre T (rvalue ise) veya T&(lvalue) ise tipi kullanılır.
template <typename...Args>
myshared(Args&&... args) 
{
  _mtype = new t(std::forward<Args>(args)...);
  counter = counter +1;
}
C++11 Örnekleri
Variadic Template C++11 yazısına taşıdım.

C++14 Örnekler
Variadic Template C++14 yazısına taşıdım.

Variadic Template Partial Specialization
Böylec bir kavram var ancak anladığım kadarıyla derleyiciler arasında tutarsızlık bulunuyor.

Parametrelerin Alt Kümesine Erişmek
Metodumuza geçilen parametrelerin alt kümesine erişmek mümkün ancak anlamadım.







Hiç yorum yok:

Yorum Gönder