Linux 核心 struct proto_ops 大量使用函數指標成員:
struct proto_ops {
int family;
struct module *owner;
int (*release)(struct socket *sock);
int (*bind)(struct socket *, struct sockaddr *, int);
// ... 更多操作指標
};
這是 C 語言模擬物件導向多型的經典手法:結構體封裝資料,函數指標封裝行為,不同協議族填入不同函數實現「虛函數表」效果。
| 特性 | C 結構體 | C++ 結構體/類別 |
|---|---|---|
| 成員函數 | 不支援,改用函數指標 | 支援,含 this 指標 |
| 封裝 | 無 | public/private/protected |
| 繼承/多型 | 手動模擬 | 原生支援 |
int func1(int n) { printf("func1: %d\n", n); return n; }
int func2(int n) { printf("func2: %d\n", n); return n; }
int main() {
int (*arr[2])(int) = { func1, func2 }; // 陣列元素為函數指標
arr[0](1); // 呼叫 func1
arr[1](2); // 呼叫 func2
return 0;
}
int (*arr[2])(int) 宣告:arr 是陣列,元素型別為「接受 int 回傳 int 的函數指標」。
typedef 簡化複雜函數指標型別宣告。NULL 代表不支援),調用端需檢查非空。