Potrafi ktoś wymienić różnice między template <typename T> a template <class T> i kiedy jak pisać ?
Wg słów zawartych tutaj, nie różnią się niczym, oprócz małych niuansów przy tworzeniu szablonów z parametrami jako szablony.
Mniej więcej jakie ?
Przy "metaprogramowaniu" (to pojęcie cały czas jest mi troche obce...).
Np.:
template<typename T> typename std::enable_if<std::is_same<float, T>::value, double>::type f();
Dzięki temu kompialtor stworzy instancje funkcji f (z typem zwracanym double) tylko jęsli do template-a podamy typ float (w innym wypadku wyrzuci błąd kompilacji bo std::enable_if<...>::type nie będzie istnieć).
Także typename służy do powiedzenia kompilatorowi, że std::enable_if<...>::type to typ.
Ofc ten przykład nie ma żadnego sensu istnienia - to tylko taki przykład :P
teamplate< typename T> - za T możesz podać wszystko, int, float, oraz typ klasy czy struktury
teamplate<class T> - za T możesz podać tylko typ klasy, nie możesz podać float, ani int ani double.
Pisałem co nieco o tym na mojej stronie tutaj.
http://coliru.stacked-crooked.com/a/5fd6bb81581deb1c
Typename było dla C, class jest dla C++.
A to nie tak, że class było zawsze, a typename został wprowadzony w celu uniknięcia kolizji nazw?
93,427 zapytań
142,421 odpowiedzi
322,649 komentarzy
62,787 pasjonatów
Motyw:
Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡
Oto polecana książka warta uwagi.Pełną listę książek znajdziesz tutaj