Metodun imzası şöyle
T tipini belirtmek istersek şöyle yaparız. Belitmezsek, parametre tiplerinden çıkarım yapılır.
Örnek
volatile aynı const gibi bir qualifier'dır. Elimizde şöyle bir kod olsun.
Örnek - variadic template
T yapısının std::pair olduğunu varsayalım. Şöyle yaparız.
const T& min (const T& l, const T& r );
Açıklaması şöyle
std::min is defined in terms of an (a<b) comparison expression (cppreference), with (a<b) ? a : b as a possible implementationstinationPrefixes
Bu metodun const olmayan bir türevi yok!
template <typename T>
T& min(T& a, T& b);
Bu yüzden şu kod derlenmez.std::min(x, y) += 1;
Gerçekleştirimi şöyle olabilir.const T& min(const T& l, const T&r) {
return l <= r ? l : r;
}
Şöyle olabilir.const T& min(const T& l, const T& r) {
return r < l ? r : l;
}
ÖrnekT tipini belirtmek istersek şöyle yaparız. Belitmezsek, parametre tiplerinden çıkarım yapılır.
std::min<int>(fifoCount, 128);Her iki parametrenin de aynı tip olması gerekir.
Örnek
volatile aynı const gibi bir qualifier'dır. Elimizde şöyle bir kod olsun.
volatile int i{100};
int j{200};
std::cout << std::min(i, j);
Parametre tipleri farklı olduğu için bu kod derlenmez çıktı olarak şunu alırız.Çünkü std::min her iki parametresinin de aynı tip olmasını ister. Şöyle yaparız.error: no matching function for call to ‘min(volatile int&, int&)’
std::min<volatile int>(i, j)
std::min - initializer_list
C++11 ile geliyor. İmzası şöyletemplate <class T>
constexpr T min(initializer_list<T> t);
Karşılaştırma için T'nin < işlemini desteklemesi ve metod T döndürdüğü için T'nin CopyConstructable olması gerekir.Requires: T is LessThanComparable and CopyConstructible and t.size() > 0.
T yapısının std::pair olduğunu varsayalım. Şöyle yaparız.
#include <algorithm>
template <typename ...Ts>
auto intersection(const Ts&... ps)
{
return std::make_pair(std::max({ps.first...}), std::min({ps.second...}));
}
Hiç yorum yok:
Yorum Gönder