24 Şubat 2020 Pazartesi

typename Anahtar Kelimesi

1. Template Parametre Tanımlama
C++ ile template kullanmak istiyorsak parametreleri typename ile belirtiyoruz.

Örnek
Şöyle yaparız
template <typename T> ...
Örnek
Şöyle yaparız
template <typename T>
struct foo {
    using type = int;
};
Class'tan Farkı Nedir?
Aslında bir farkı yok. İlk başta typename yerine class kelimesi kullanılıyordu. Yani yukarıdaki typedef yerine şöyle yazılırdı. Aslında halen de yazılabilir ancak böyle kullanılmaması daha iyi.
template <class T> ...
Daha sonra class kelimesinin çok fazla anlam yüklemesine maruz kaldığı düşünüldüğü için class yerine typename kelimesi getirildi

2 Template Parametre Return Etmek
Örnek
Elimizde şöyle bir kod olsun. Burada döndürülen template tipinden önce de typename kullanmak gerekir.
template<typename T>
typename Queue<T>::Node* Queue<T>::test() {}
3. Template Template Parametre Tanımlama
Örnek
foo metodumuzun string tipinden herhangi bir container alabilmesi için şöyle yaparız
template<template<typename...> typename C>
void foo(const C<std::string> &cont)
{
  for(std::string val: cont) {
    std::cout << val << std::endl;
  }
}
Çağırmak için şöyle yaparız.
std::set<std::string> strset;
std::vector<std::string> strvec;
std::list<std::string> strlist;

foo(strset);
foo(strvec);
foo(strlist);
Eğer string container yerine herhangi bir tip ile de çalışmasını istiyorsak şöyle yaparız.
template<template<typename...> typename C, typename ... D>
void foo(const C<D...> &cont)
{
  for(const auto& val: cont) {
    std::cout << val << std::endl;
  }
}
3. typename Neden Lazım?
Amacı derleyiciye yardımcı olma. Açıklaması şöyle.
The keyword typename is used to help compiler parse the source. It points the id is a type name, not a variable name or method name.



Hiç yorum yok:

Yorum Gönder