複数の構造をもった点集合の表現
たとえば、ある空間上の点を表す型 Point があるとする。
この点の集合は、たとえば配列とか、 std::vector とか。中身は実体でもいいし、ポインタでもいいし、点のIDでもいい。
で、この集合 A に、構造情報も付け加えたい。たとえば、 kd-tree とか、 Delaunay 三角網とか。
もしこれらの情報を、 A に合わせて K, D と作った場合、これらの間の同期が非常に面倒である。なので、 A を拡張して、指定した構造情報を常に維持するデータ表現を考えたくなる。さて、どうやって実装するか。なるべく汎用にしたい。つまり、複数の構造を自由に付けたり外したりできる方が望ましい。かつ、今まで Point で書かれていたプログラムを最小の変更で(可能ならゼロで)済ませたい。
良い実装方法は何かな。