公司的程式 (特別是那種底層 API) 其實很常使用 union 來減少非必要的記憶體使用量,只是如果使用 union 的話就必須要能夠知道該用哪種型別來存取 union 中的變數,因此很常出現這種程式碼:
enum Type {Int, Double};
struct Data {
Type type;
union {
int i;
double d;
};
};
int main()
{
Data data;
data.type = Int;
data.i = 3;
data.type = Double;
data.d = 3.14;
return ;
}
簡單來說就是設定好要存取的是哪種型態 (然後用個 enum 來表示),接著 API 會根據設定的型態來對 union 中的變數做存取。以上面的範例來說,會根據 Data 中的 type 是被設定成 Int 還是 Double 來決定 是要存取 data.i 還是 data.d。
因為個人覺得這樣滿容易手殘的,特別是公司的 API 其實型別種類有點多 |||Orz,所以想要簡化 API 的使用方式,希望可以直接根據所設定的型別存取對應的變數就好,畢竟這種關聯性其實是固定的,利用 generic programming 應該是不難做到的。