@teh_KaiN, post #2
/* Metody poszczególnych typów obiektów */ LONG Magazynier(struct Plansza *plansza, struct Obiekt *obiekt, LONG metoda, APTR dane); LONG Skrzynia(struct Plansza *plansza, struct Obiekt *obiekt, LONG metoda, APTR dane);
@Hexmage960, post #3
#define PROTOKOL_21 struct Plansza *plansza, struct Obiekt *obiekt, LONG metoda, APTR dane LONG Magazynier(PROTOKOL_21);
#define PROTOKOL_21(f) LONG f(struct Plansza *plansza, struct Obiekt *obiekt, LONG metoda, APTR dane) PROTOKOL_21(Magazynier);
@Krashan, post #4
@Hexmage960, post #5
Generalnie wzorowałem się też na Amigowym BOOPSINie do końca, BOOPSI ma jedną funkcję DoMethod(), którą obsługujesz wszystkie klasy obiektów, klasa obiektu jest zapisana w obiekcie. Dzięki temu problem z wielokrotnym deklarowaniem funkcji z tym samym „protokołem” nie istnieje. I można mieć dziedziczenie klas. U Ciebie to raczej niewykonalne.
@Krashan, post #7
typedef LONG (*Metoda)(struct Plansza *plansza, struct Obiekt *obiekt, LONG metoda, APTR dane);
@Krashan, post #4
/* Definicja struktury */
typedef struct MetodaParam
{
struct Plansza *plansza;
struct Obiekt *obiekt;
LONG metoda;
APTR dane;
} *PARAM;
/* Deklaracje */
LONG Magazynier(PARAM);
LONG Skrzynia(PARAM);
LONG Krysztal(PARAM);
LONG Stworek(PARAM);
/* Funkcja pośrednicząca */
LONG WywolajMetode(struct Plansza *plansza, struct Obiekt *obiekt, LONG metoda, APTR dane)
{
struct MetodaParam param;
param.plansza = plansza;
param.obiekt = obiekt;
param.metoda = metoda;
param.dane = dane;
return(Metody[obiekt->Typ](¶m));
}@Hexmage960, post #3
@asman, post #10
@Hexmage960, post #11
Generalnie chodzi o przejrzystość
- Metoda - numer metody,
- Dane - pomocnicze dane, zależne od metody.
@teh_KaiN, post #12
LONG Skrzynia(struct Plansza *plansza, struct Obiekt *obiekt, Wiadomosc wiad);
typedef struct
{
LONG metoda;
} *Wiadomosc;