• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Czy jest jakiś sens używania "typedef"?

Object Storage Arubacloud
0 głosów
3,272 wizyt
pytanie zadane 29 stycznia 2016 w C i C++ przez Daaa22 Dyskutant (8,250 p.)
Z tego co wiem to typedef dodaje nowy typ zmiennej. np.

typedef string zmienna;

, ale to jest bez sensu, bo równie dobrze można użyć string zmienna, więc jaki sens ma używanie typedef?

5 odpowiedzi

+5 głosów
odpowiedź 29 stycznia 2016 przez draghan VIP (106,230 p.)
wybrane 29 stycznia 2016 przez Daaa22
 
Najlepsza

Dodam tylko, że oprócz skrócenia długich nazw typów (namiętnie stosowane przy szablonach i niektórych wskaźnikach), można tym wprowadzać zmiany na poziomie semantycznym, nadając jednemu typowi danych kilka różnych znaczeń, w zależności od kontekstu użycia.

Przykładowo możesz zrobić typedefy dla inta, które będą podpowiadały intencję już w prototypie, chociaż tak naprawdę będą to zwykłe liczby całkowite.

typedef int IdMusic;
typedef int IdPicture;

bool playMusic(IdMusic song) // czytelniejsza intencja, niż "int song"
{
}

bool drawPicture(IdPicture image) // znów - czytelniej, niż int image
{
}

 

komentarz 29 stycznia 2016 przez Noak Mądrala (5,900 p.)
można go stosować zamiennie z #define ??
komentarz 29 stycznia 2016 przez draghan VIP (106,230 p.)

Nie, typedef jest mechanizmem języka, zaś #define jest dyrektywą preprocesora.

Używając typedef, kompilator sprawdzi poprawność Twojego 'wyrażenia', zaś dla preprocesora będzie to tylko zwykły fragment tekstu do przetworzenia w inny.

Warto jeszcze nadmienić, że "semantyczna odmiana" typedefa nie jest najbardziej elegancką formą podpowiadania intencji, chociaż prostą i skuteczną.

+2 głosów
odpowiedź 29 stycznia 2016 przez Colossus Mądrala (6,410 p.)

 

typedef unsigned long long ull;

Nie ma sensu? :O

komentarz 29 stycznia 2016 przez Daaa22 Dyskutant (8,250 p.)
Nie ma, bo możesz krócej wpisać unsigned long long ull;
komentarz 29 stycznia 2016 przez mrcnsct Nałogowiec (36,390 p.)
Po takim użyciu typedef nie musisz już pisać unsigned long long a, tylko ull a.
komentarz 29 stycznia 2016 przez Colossus Mądrala (6,410 p.)
Dokładnie :)
+1 głos
odpowiedź 29 stycznia 2016 przez criss Mędrzec (172,590 p.)

typedef zastępuje nazwe typu. Także typedef string str sprawi, że zapis str zmienna będzie równoznaczny string zmienna.

komentarz 29 stycznia 2016 przez Daaa22 Dyskutant (8,250 p.)
Więc nie ma sensu go używać, i wpisać po prostu "string zmienna", zamiast "typedef string zmienna"?
komentarz 29 stycznia 2016 przez criss Mędrzec (172,590 p.)
Jest użyteczny przy jakichś długich nazwach typów z ktorymi prędzej czy później będziesz miał styczność :P
komentarz 29 stycznia 2016 przez Daaa22 Dyskutant (8,250 p.)
Podasz przykład?
komentarz 29 stycznia 2016 przez adrian17 Ekspert (344,860 p.)
class C{
public:
	std::unordered_map<std::string, std::vector<Rzecz*>> & getCache(int cache_type);
private:

	std::unordered_map<std::string, std::vector<Rzecz*>> cache_danych;
	std::unordered_map<std::string, std::vector<Rzecz*>> cache_inny;
	std::unordered_map<std::string, std::vector<Rzecz*>> cache_jeszcze_inny;
	
};

class C{
public:
	typedef std::unordered_map<std::string, std::vector<Rzecz*>> Cache;
	// albo praktycznie rownowazne, tylko lepsze (C++11):
	using Cache = std::unordered_map<std::string, std::vector<Rzecz*>>;

	Cache & getCache(int cache_type);

private:
	Cache cache_danych;
	Cache cache_inny;
	Cache cache_jeszcze_inny;
};

 

0 głosów
odpowiedź 29 stycznia 2016 przez mrcnsct Nałogowiec (36,390 p.)

Przydaje się np. przy strukturach. Nie musisz za każdym razem pisać struct. http://mirekk36.blogspot.com/2013/07/struktury-w-c-wyjasnijmy-sobie-dokadnie.html

0 głosów
odpowiedź 29 stycznia 2016 przez Szykem2 Nałogowiec (29,510 p.)
Wyobraź sobie, że piszesz jakiś 10000 linijkowy kod używasz jakiejś klasy basowej bardzo często i używasz w niej jakiegoś typu np liczby 16 bitowej(lub dowolny inny twój lub wbudowany typ) i teraz dostajesz zlecenie od dużej firmy ale twój kod musi obsługiwać liczby 32-bitowe. Masz więc 2 wyjścia albo nie używać typedefu i zmienić kod w 1000 miejsc albo użyć typedefu i w tym tysiącu miejsc od początku użyć myclass::value_type i zmienić ten typ tylko raz bo typedef robi wszystko za Ciebie. Myślę, że odpowiedź narzuca się sama, a przykład jest wystarczający.
komentarz 29 stycznia 2016 przez draghan VIP (106,230 p.)
Twój przykład sugeruje, żeby nigdzie nie pisać nazw typów explicite, tylko wszędzie stosować makiety, co musi być szalenie niewygodne. Sądzę też, że nie wprowadza wiele czytelności do pisanego kodu.
komentarz 29 stycznia 2016 przez Szykem2 Nałogowiec (29,510 p.)
Nie napisałem, żeby nie stosować nigdzie ale chodzi o to, żeby uprościć proces refaktoryzacji i uprościć ewentualną zmianę typowania w danym programie. Zawsze trzeba używać typów wbudowanych tego nie unikniesz(chyba że wszędzie używasz auto ale to się trochę mija z nauką o typach) ale w kluczowych miejscach, tam, gdzie jesteś pewien, że ten typ będzie często używany i może się zmienić używasz typedefu, który zmniejsza czas przerabiania kodu z kilku godzin do kilku minut góra. Typedef się jeszcze przydaje przy szablonach, kiedy nie znasz konkretnego typu, na którym operujesz u tedy używasz myclass::value_type i uzyskujesz różne typy w zależności od wersji klasy szablonowej, którą stworzyłeś.

Podobne pytania

0 głosów
1 odpowiedź 2,404 wizyt
pytanie zadane 2 lutego 2016 w C i C++ przez Daaa22 Dyskutant (8,250 p.)
0 głosów
1 odpowiedź 208 wizyt
0 głosów
1 odpowiedź 888 wizyt
pytanie zadane 30 marca 2016 w C i C++ przez enigmatycznyclay Bywalec (2,450 p.)

92,568 zapytań

141,422 odpowiedzi

319,637 komentarzy

61,957 pasjonatów

Motyw:

Akcja Pajacyk

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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...