Giriş
Template Argument Deduction explicit veya implicit olabilir.
explicit şöyle olur.
STL ile Template Argument Deduction
template argument deduction STL ile bir çok algoritmada karşımıza çıkıyor. Genelde verilen dizinin büyüklüğünü derleyicinin bulması için kullanılıyor.
Bazı implicit örnekler şöyle.
std::end
std::end şöyle tanımlı. N boyutlu T tipini içeren bir array'i referans olarak alır.
Kendi Kodumuz İçin Implicit Diğer Örnekler
Örnek
Template kodlarda şöyle yaparız.
recv diye bir metodumuz olsun
Template Argument Deduction explicit veya implicit olabilir.
explicit şöyle olur.
template<typename T>
void do_something(T value) {};
do_something<float>(6); // T is float
implicit şöyle olur.int x;
do_something(x); // since first argument is T and x is int, T is int
Bir başka implicit örnek şöyletemplate <typename T1,typename T2> void add(T2 a);
add<sample>(3); // T1 is explcitly sample, T2 is implicitly int
STL ile Template Argument Deduction
template argument deduction STL ile bir çok algoritmada karşımıza çıkıyor. Genelde verilen dizinin büyüklüğünü derleyicinin bulması için kullanılıyor.
Bazı implicit örnekler şöyle.
std::end
std::end şöyle tanımlı. N boyutlu T tipini içeren bir array'i referans olarak alır.
template< class T, std::size_t N >
T* end( T (&array)[N] );
Metodun içi de muhtemelen şöyletemplate< class T, std::size_t N >
T* end( T (&array)[N] )
{
return array + N ;
}
Dolayısıyla şöyle kullanılabiliyor.int arr[] = {1, 2, 3};
size = end(arr) - begin(arr);
Kendi Kodumuz İçin Implicit Diğer Örnekler
Örnek
Template kodlarda şöyle yaparız.
template <std::size_t sz)
void foo(double (&x)[sz]) {
std::copy_n(x, sz, arr);
}
Örnekrecv diye bir metodumuz olsun
int recv(char* buf, int len) {
int tmp = pos;
while (len-- && pos < 26)
*buf++ = arr[pos++];
return pos - tmp;
}
template <size_t N>
int recv2(char(&array)[N]) {
return recv(array, N);
}
Bu metodu şöyle çağırabiliriz.char buffer[10];
recv2(buffer)
Hiç yorum yok:
Yorum Gönder