任意のデータ構造(リスト、マップ、配列、二分木など)で動作するジェネリック実装手法を紹介します。
ヘッダーのマクロ展開による従来のLevel0ジェネリックは可読性やバイナリ肥大化、ビルド時間増加などの欠点があります。
void *を使うLevel1は型安全性がなくパフォーマンス面でもメモリ割り当てやキャッシュミスの問題があります。
Flexible Array Memberを用いるLevel2はノードとデータを一度のmallocで確保し、メモリ効率とパフォーマンスを改善します。
unionのpayloadメンバーと__typeof__マクロを利用するLevel3で、アイテム型とリスト型の不一致をコンパイル時に検出できるマクロを実装します。
typedefでList(type)を定義することで、引数渡しや変数間の型エラーを回避できます。
同様の技術はハッシュマップなど複数型パラメータを持つデータ構造にも応用可能です。
Get notified when new stories are published for "🇯🇵 Hacker News 日本語"