ポリゴンメッシュのエッジを抽出するのに、std::map を使おうと思ったのだが、はまってしまった。エッジ両端の2頂点の3次元座標(計6個の float) をキーにしようとした。比較用の関数オブジェクトを作って、それを predicate として使おうとしたのだが、コンパイルエラーがなかなか回避できず。関数オブジェクトのコンストラクタに引数があるのがまずいのか。
適当にやっていたらなんとかコンパイルは通った。小生の常識からはとても合っているとは思えない構文になってしまった。本当にこれで動くのか。
struct EdgeComp { EdgeComp(const VertexList _vertexList) { 〜 } bool operator() (const Edge& A, const Edge& B) { 〜 } }; std::map<Edge, 〜, EdgeComp> edgeList(vertexList);
edgeList のコンストラクタの引数に EdgeComp のコンストラクタへの引数を書くなんて、本当にあっているのだろうか。ただの vertexList ではなく、なんとなく EdgeComp(vertexList) と書きたいところ。
さっさと動かしてテストすればいいのだが、現状、作業が面倒でコンパイルが通ったところまで。おいおい実行していろいろ確かめてみよう。
ちなみに、最初に map のテンプレート引数にプレディケートの型を書くのを忘れていたのは、なかなかに恥ずかしいボケだった。