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

ext

Treue Seele

  • Private Nachricht senden

21

14.05.2006, 17:07

typedef für nen pointer zu verwenden wie in deinem beispiel ist ne gute idee, wenn du gerne mehrere variablen in einer zeile definierst.

Weil
int* a,b,c;
erzeugt nur einen int* (a) b und c sind int

Bei
typedef int* pint;
pint a,b,c;
sind alle drei ein int*

Außerdem ist es praktisch für Typen bestimmt Größe zum Beispiel typedef int int32;
so musst nur das typedef ändern, wenn int mal keine 32bits mehr groß ist, auf nen 32bit großen typ

Dann gibts noch den Fall, dass der echte Typ unbekannt ist und man nur nen abstrakten Typ hat wie z.B. der Typ streamsize den die c++ streams verwenden zur Angabe der Streamgröße.

Und dann gibts noch den Fall bei templates, dort ist ein typedef wichtig, damit man einheitliche Bezeichner hat, wenn diese variabel sind.
zum beispiel char_type in den c++ streams. Da ist char_type "char" in basic_istream<char>, aber "wchar_t" in basic_istream<wchar_t>
In der STL findest du überall solche typedefs.

Und dann gibts noch den häufigsten Fall wo du ein typedef verwenden wirst, so ist ein std::map< std::string, std::vector< int > > recht unhandlich, viel schöner ist es da mit nem typedef zu arbeiten
typedef std::map< std::string, std::vector< int > > mymap;
und für den iterator noch eines
typedef mymap::iterator mymapiter;

Und schon kannst du viel übersichtlicher arbeiten :)



Was schade ist, es gibt keine template-typedefs, d.h. du kannst folgendes nicht machen

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
template< class T >
struct Test
{
};
template< class U >
struct Versuch
{
   typedef Test< U > TestTyp;
};


Besonders merkwürdig, wenn man bedenkt, dass es friend-templates gibt.

Phil_GDM

Alter Hase

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

22

14.05.2006, 17:59

Hier noch ein Fall, indem #define wirklich hilfreich sein kann, ansonsten wäre der Präprozessor heutzutage ja komplett arbeitslos ;)
(ist aus den GameProgramming Gems 4, und ich finde es ziemlich genial)

Interface.h

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#define INTERFACE_Scene(terminal) \
  virtual SceneNode* addSceneNode(std::wstring const& node_name, __uint parent) throw(InvalidValueException) ##terminal \
  virtual SceneNode* addSceneNode(std::wstring const& node_name, SceneNode* parent) throw(InvalidValueException) ##terminal \
  virtual SceneNode* addSceneNode(std::wstring const& node_name, std::wstring const& parent) throw(InvalidValueException) ##terminal \
  virtual SceneNode* getNode(__uint node_id, SceneNode* start_from = NULL) ##terminal \
  virtual SceneNode* getNode(std::wstring const& node_name, SceneNode* start_from = NULL) ##terminal                                  

#define BASE_Scene    INTERFACE_Scene(=0;)
#define DERIVED_Scene INTERFACE_Scene(;)

class Interface_Scene
{
public:
  BASE_Scene;
};


Scene.h

C-/C++-Quelltext

1
2
3
4
5
class Scene
{
public:
  DERIVED_Scene;
};

mfg Philipp

ext

Treue Seele

  • Private Nachricht senden

23

14.05.2006, 18:22

Codegenerierung ist nicht schlecht, hat aber den Nachteil, dass die IDE die Klassenmethoden nicht mehr sehen kann und man fortan auf Autovervollständigung verzichten muss (bei mir würde es die alle auch noch als Fehler markieren).
Da sollte man sich vorher eben Gedanken drüber machen was einem auf lange Sicht mehr Zeit spart.

Und mit exception-qualifier sollte man vorsichtig umgehen, da man garantieren muss, dass wirklich niemals ne andere Exception nach außen dringt.

Phil_GDM

Alter Hase

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

24

14.05.2006, 18:49

Zitat von »"ext"«

Codegenerierung ist nicht schlecht, hat aber den Nachteil, dass die IDE die Klassenmethoden nicht mehr sehen kann und man fortan auf Autovervollständigung verzichten muss (bei mir würde es die alle auch noch als Fehler markieren).


Visual Studio hat keine Probleme damit, die Methoden anzuzeigen.

mfg Philipp

ext

Treue Seele

  • Private Nachricht senden

25

14.05.2006, 19:49

Bei mir nicht, liegt dann wohl an Visual Assist.

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

26

15.05.2006, 09:53

danke für eure antworten.. jetzt ist mir einiges etwas klarer :)
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

Werbeanzeige