Treść książki
Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
Rozdział2NowoczesnyC++
return0;
}
Patrzącnakodzlistingu2-12ktośmógłbysięzastanawiać,dlaczegowogólemielibyśmy
robićcośtakiego.Dedukowanietypuzwracanegofunkcjimaniewielkiezastosowanie,
jeślizawszeokreślamy,żebędzieto
int
-itojestprawda.Dedukowanietypuzwracane-
gojestznaczniebardziejprzydatnewprzypadkufunkcji,którewswojejsygnaturzenie
majązadeklarowanychtypówparametrów.Listing2-13pokazujededukcjęwdziałaniu
dlafunkcjiszablonowej.
Listing2-13.DedukowanietypówzwracanychdlafunkcjiszablonowychC++11
#include<iostream>
usingnamespacestd;
template<typenameT>
autoAutoFunctionFromParameter(Tparameter)->decltype(parameter)
{
returnparameter;
}
intmain()
{
autovalue
=
AutoFunctionFromParameter(2);
cout<<value<<endl;
return0;
}
Listing2-13pokazujeużytecznezastosowaniededukowaniatypuzwracanego.Tym
razemfunkcjajestspecyfikowanajakoszablon(
template
);tymsamymkompilator
niemożeokreślićtypuzwracanego,opierającsięnatypieparametru.Wstandardzie
C++11wprowadzonosłowokluczowe
decltype
jakodopełnieniesłowakluczowego
auto
.
decltype
służydonakazaniakompilatorowiużyciatypuwdanymwyrażeniu.Wy-
rażeniemtymmożebyćnazwazmiennej;tymniemniejmożemyturównieżwstawić
funkcję,a
decltype
pozwoliwydedukowaćtypzwracanyztejfunkcji.
Wtymmiejscukodzatoczyłpełnekoło.StandardC++11zezwalanaużycie
auto
dla
funkcjiwceludedukowaniatypuzwracanego,alewymaga,abytypbyłnadalspecyfiko-
wanyjakotypwartościzwracanej(trailingreturntype).Typtenmożebyćdedukowany
39