グラフでダイクストラ検索を行うプロジェクトがあり、ノードに使用する赤黒ツリーと優先度キューを実装しましたが、エッジなどの他のものにも同じデータ構造が必要です。おそらく2つだけ、おそらく3つのタイプの構造体を一緒に使用すると思います。
構造体 'タイプ'が最初からわかっているようなシナリオでは、void *を使用してコンパレーターに関数ポインターを渡す必要がありますか、それともタイプセーフを維持するためにソースファイルを複製することは私が守れるスタンスだと思いますか?
私は、この種の設計上の決定を直感するのに十分なほどCを掘り下げる機会がなかったので、どんな助けにも感謝します。
コンテナーに格納される型がわかっていて数が少ない場合は、実際に両方の型の安全性を確保できますand重複なし。
まず、void*
を使用してストレージやコールバック関数をポイントし、比較などを行う、汎用コンテナーを作成します。次に、ジェネリックコンテナーの周りに型固有のラッパーを記述し、残りのコードからそれらを使用します。
書くラッパーが多い場合、これは面倒になりますが、2つまたは3つで面倒なことはありません。