struct GenInfo {
uint64_t (*next)(struct GenInfo * const); // 第一行
enum GeneratorType type;
union { ... } gen;
};
uint64_t (*next)(struct GenInfo * const) 是函數指標,而非結構體指標。
詳細拆解:
uint64_t:回傳型別(無號 64 位整數)。(*next):next 是指標變數名。(struct GenInfo * const):參數列表,單一參數,型別為「指向 const GenInfo 的指標」(指標本身 const,指向內容可修改)。等價 typedef uint64_t (*NextFunc)(struct GenInfo * const); NextFunc next;。
實現多型/策略模式:不同產生器類型(Constant, Counter, Zipfian...)各自實作 next 函數,GenInfo 透過函數指標統一呼叫,無需 switch(type)。
uint64_t constant_next(struct GenInfo* const g) { return g->gen.constant.value; }
uint64_t counter_next(struct GenInfo* const g) { return g->gen.counter.current++; }
// 初始化
struct GenInfo gi;
gi.type = GEN_CONSTANT;
gi.next = constant_next;
gi.gen.constant.value = 42;
// 使用
uint64_t val = gi.next(&gi); // 呼叫對應策略
struct GenInfo* next; // 單純指標,非函數指標
「是一個函數指針。」