次のコードスニペットのポインター関数宣言を使用すると、構造体内の各関数の名前を変更できます。これは単なる架空のものであるため、名前はまだ重要ではありません。
ヘッダーファイル
typedef struct
{
bool (*enabled)(uint32_void);
void (*start)(uint32_t);
void (*stop)(uint32_t);
bool (*expired)(void);
} battle_star_gallactica;
Cファイル
static bool Battle_v0_enabled (void) { ... }
static void Battle_v0_start (uint32_t) { ... }
static void Battle_v0_stop (uint32_t) { ... }
static bool Battle_v0_stop (void) { ... }
const battle_star_gallactica battle_v0 =
{
enabled,
start,
stop,
expired
};
...
1つの使用例
battle_v0.start(1000);
Cファイルスニペットは他のバージョンでも繰り返されます(たとえば、v0ではなくv1またはv2)。
これはどのように作動しますか?
編集
修正されたコード:
ヘッダーファイル
typedef struct
{
bool (*enabled)(uint32_void);
void (*start)(uint32_t);
void (*stop)(uint32_t);
bool (*expired)(void);
} battle_star_gallactica;
extern const battle_star_gallactica battle_v0;
extern const battle_star_gallactica battle_v1;
...
Cファイル
static bool Battle_v0_enabled (void) { ... }
static void Battle_v0_start (uint32_t val) { ... }
static void Battle_v0_stop (uint32_t val) { ... }
static bool Battle_v0_expired (void) { ... }
const battle_star_gallactica battle_v0 =
{
Battle_v0_enabled,
Battle_v0_start,
Battle_v0_stop,
Battle_v0_expired
};
...
1つの使用例
battle_v0.start(1000);