Powiedzmy, że chcesz, aby jakiś silnik, który powinien wspierać ładowanie graficznych Image
s, więc mamNowoczesne C i C++: możliwe jest użycie jednej zdefiniowanej struktury dla innej deklarowanej struktury?
struct Image;
Image* load_image_from_file(...);
Nie chcę zewnętrzny świat wiedział, co naprawdę jest Image
, będą zajmować się tylko wskaźniki do niego.
Jednak wewnątrz engine
chcę użyć określonego typu, np. SDL_Surface
, który jest w pełni zdefiniowany w SDL.
Czy mogę jakoś zmienić obraz dla tego pliku, aby kompilator przyjmował SDL_Surface*
za każdym razem, gdy zobaczy Image*
(inny niż makro)?
tj. Chcę coś typedef struct SDL_Surface Image;
Wszystkie próby jak
using Image = SDL_Surface;
typedef SDL_Surface Image;
typedef struct SDL_Surface Image;
produkować błąd kompilacji czasu (http://codepad.org/1cFn18oh).
wiem, że mogę użyć czegoś podobnego struct Image{SDL_Surface* surface};
w engine.c
/engine.cpp
ale tworzy niepotrzebne zadnie i będę musiał wpisać ->surface
. Innym brudnym rozwiązaniem jest użycie jawnych rzutów, np. ((SDL_Surface*)image)
, ale interesuje mnie czystsza zmiana nazwy.
PS. Interesują mnie odpowiedzi na C i C++.
O ile mi wiadomo, "struct Image {SDL_Surface surface};" (brak wskaźnika do) jest najbliższym dostępnym przybliżeniem, ale będę zainteresowany, aby dowiedzieć się, czy jest coś lepszego teraz. – zwol
Och, w C++ czy wypróbowałeś 'struct Image: public SDL_Surface {};'?To ma sporo ostrych krawędzi, ale może po prostu robić to, co chcesz. – zwol
@ Pozwala to na pracę, ale nadal będę musiał używać rzutów, aby przekonwertować 'SDL_Surface *', które są zwracane przez funkcje SDL. Używanie (bez wskaźnika do) nie jest możliwe, ponieważ SDL zwraca wskaźniki. – user2998754