Lassen Sie uns sagen, dass ich eine Art von Motor machen wollen, die grafische Image
s Laden unterstützen sollte, so habe ichModern C und C++: Es ist möglich, eine definierte Struktur für andere deklarierte Struktur zu verwenden?
struct Image;
Image* load_image_from_file(...);
Ich will nicht Außenwelt wissen, was Image
wirklich ist, sie mit nur beschäftigen werden Hinweise darauf.
Allerdings innerhalb engine
möchte ich spezifischen Typ, z. SDL_Surface
, die vollständig in SDL definiert ist.
Kann ich irgendwie Image für diese Datei neu so Compiler nimmt SDL_Surface*
jedes Mal, wenn es Image*
(andere als Makro) sieht?
I.e. Ich möchte so etwas wie typedef struct SDL_Surface Image;
Alle Versuche, wie
using Image = SDL_Surface;
typedef SDL_Surface Image;
typedef struct SDL_Surface Image;
produzieren Zeitfehler kompilieren (http://codepad.org/1cFn18oh).
Ich weiß, dass ich so etwas wie struct Image{SDL_Surface* surface};
in engine.c
/engine.cpp
verwenden kann, aber es schafft unnötige indirection und ich werde ->surface
geben muß. Eine weitere schmutzige Lösung besteht darin, explizite Umwandlungen zu verwenden, z. ((SDL_Surface*)image)
aber ich interessiere mich für sauberere Umbenennung.
PS. Ich interessiere mich für Antworten für C und C++.
Soweit ich weiß, ist 'struct Image {SDL_Surface surface};' (kein Zeiger-to) die nächste verfügbare Annäherung, aber ich bin daran interessiert herauszufinden, ob es jetzt etwas Besseres gibt. – zwol
Oh, in C++ hast du versucht, 'struct Image: public SDL_Surface {};'?Das hat eine Reihe von Ecken und Kanten, aber es könnte tun, was Sie wollen. – zwol
@zwol diese Arbeit, aber ich muss immer noch Umwandlungen verwenden, um 'SDL_Surface *' zu konvertieren, die von SDL-Funktionen zurückgegeben werden. Die Verwendung von (no pointer-to) ist nicht möglich, da SDL Zeiger zurückgibt. – user2998754