Normal fonksyon yazarken cok bir farki yok gibi gorunse de bu stilin (trailing return type deniyor) normal fonksyon tanimina gore ufak bir ustunlugu var: scope. Trailing return type'da kullandigimiz isimler, fonksyonun govdesindeymis gibi derleniyor.
Ornegin asagidaki sinifa bir uye fonksyon yazdigimizi dusunun:
struct foo
{
using map_t = std::map<std::string, std::string>;
using elem_t = map_t::iterator;
elem_t get_elem(const std::string& key);
private:
map_t m_map;
};
get_elem
fonksyonunu normal bicimde yazmak isterseniz dogrudan elem_t
olarak donus tipi koyamazsiniz:
// derlenmeyecek
elem_t foo::get_elem(const std::string& key) {
return m_map[key];
}
Fakat ayni fonksyonu trailing return type formatinda yazarsaniz, tum isimler dogru scope'lardan gelecek:
auto foo::get_elem(const std::string& key) -> elem_t {
return m_map[key];
}
Ayni sekilde fonksyona gelen parametreleri de normal stilin aksine trailing return type stiliyle kullanabiliyorsunuz, decltype gibi araclar ile.
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]