1. Template Parametre Tanımlama
C++ ile template kullanmak istiyorsak parametreleri typename ile belirtiyoruz.
Örnek
Şöyle yaparız
Şöyle yaparız
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.
2 Template Parametre Return Etmek
Örnek
Elimizde şöyle bir kod olsun. Burada döndürülen template tipinden önce de typename kullanmak gerekir.
Örnek
foo metodumuzun string tipinden herhangi bir container alabilmesi için şöyle yaparız
Amacı derleyiciye yardımcı olma. Açıklaması şöyle.
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