Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Julién

Alter Hase

  • »Julién« ist der Autor dieses Themas

Beiträge: 717

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

1

30.08.2015, 21:54

C++ | Wann sollte man "typedefs" verwenden?

Hi,
aus reiner Neugierde kam mir folgende Frage auf: Wann sollte man "typedefs" verwenden und wann nicht?
In Open Source Projekten sehe ich oft, dass primitive Datentypen "ge-typedef-t" werden.
Z.B.:

C-/C++-Quelltext

1
    typedef unsigned long EntityIndex;


Ich finde, dass es da unnötig ist.
Hingegen finde ich die Verwendung bei Funktionspointer legitim.

C-/C++-Quelltext

1
    typedef void(*TuWasVerdammtNochMal)(int);   TuWasVerdammtNochMal funktionsPointer;


Was ist denn eure Meinung dazu? Wo ist das einfach zu viel?

LG Julien
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

2

30.08.2015, 22:00

Hi,
aus reiner Neugierde kam mir folgende Frage auf: Wann sollte man "typedefs" verwenden und wann nicht?
In Open Source Projekten sehe ich oft, dass primitive Datentypen "ge-typedef-t" werden.
Z.B.:

C-/C++-Quelltext

1
    typedef unsigned long EntityIndex;


Ich finde, dass es da unnötig ist.

Solche typedefs haben meist den Sinn, den eigentlichen Typen dahinter austauschen zu können, ohne ihn an x verschiedenen Stellen austauschen zu müssen.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

3

30.08.2015, 23:13

typedef ist dank C++11 eigentlich ziemlich unnötig geworden, gibt ja using.
Wie Architekt aber sagt, genau das ist gängige Praxis. Schau dir z.B. auch mal den Code von Containern der STL an.

MfG
Check

Tobiking

1x Rätselkönig

  • Private Nachricht senden

4

30.08.2015, 23:21

Manchmal möchte man dem Code auch einfach nur mehr Ausdruck verleihen. Hinter den Typedefs "Geschwindigkeit" und "Index" könnte beides mal ein int stecken, für den Entwickler wird anhand der Typnamen aber klar, dass es wenig Sinn macht diese beiden zu vergleichen, selbst wenn die Variablennamen da mal etwas missverständlich sind. Nötig ist in der Programmierung relativ wenig. Schöner aber vieles ;)

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

5

30.08.2015, 23:25

Meistens wird es eingesetzt, wie Architekt schon gesagt hat. Tatsächlich haben die eingebauten Typen ja ziemlich zufällige, historisch entstandene Eigenschaften, in so fern macht es zum Beispiel Sinn, eigentlich immer die C-Typedefs wie uint64_t oder size_t zu verwenden. Funktionszeiger sind noch ein Wunderbares Beispiel.

In einigen Fällen kann mit Typedefs meiner Meinung nach aber auch die Verständlichkeit/Dokumentation verbessert werden.
for (ParticleIndex j = 0; j < i;++j)
oder
ParticleIndex Get();
Der Typedef-Typ beschreibt einfach viel genauer um was es sich tatsächlich handelt und welcher Wertebereich gültig ist.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Spiele Programmierer« (30.08.2015, 23:30)


6

31.08.2015, 00:59

C-/C++-Quelltext

1

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »El .prox« (03.06.2018, 00:15)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

31.08.2015, 06:47

Beispielsweise anstatt immer "unsigned int" zu schreiben, kann man einen typedef deklarieren mit dem Namen "uint".
Kann man, aber Faulheit bei der Namensgebung ist im Allgemeinen ein recht schlechtes Argument ;)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

31.08.2015, 06:52

ist für mich sogar manchmal nützlich, kannst auch deine eigenen Datentypen erstellen bspws einen Bytedatentyp mit 8 Bit

Dafür gibt's schon <cstdint> mit std::uint8_t etc. ;)

9

31.08.2015, 11:45

Hinter den Typedefs "Geschwindigkeit" und "Index" könnte beides mal ein int stecken, für den Entwickler wird anhand der Typnamen aber klar, dass es wenig Sinn macht diese beiden zu vergleichen, selbst wenn die Variablennamen da mal etwas missverständlich sind.

Möchte ich das wirklich verhindern, baue ich mir einen eigenen Datentypen, der keinen Vergleichsoperator für den Typ Gechwindigkeit definiert.

MfG
Check

Julién

Alter Hase

  • »Julién« ist der Autor dieses Themas

Beiträge: 717

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

10

01.09.2015, 17:33





Zitat von »El .prox«



ist für mich sogar manchmal nützlich, kannst auch deine eigenen Datentypen erstellen bspws einen Bytedatentyp mit 8 Bit

Dafür gibt's schon mit std::uint8_t etc.
Da gab's bei GD.Net gab's letztens eines Diskussion ob diese Typen immer gleich groß sind und ob es die Datentypen manchmal überhaupt gibt :)


Das mit dem Austauschen der Datentypen (also der Definition vom Typedef) ist doch ziemlich interessant; ich habe das jedoch bisher meist mit #define umgesetzt
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

Werbeanzeige