Fusion! Boost.Geometry

3
前へ 1 2 ・・ 6 次へ
でちまるさん(実際かわいい) @decimalbloat

分かったこと:tagディスパッチを根本的に無理な方法でやろうとしている

2011-01-12 17:17:35
でちまるさん(実際かわいい) @decimalbloat

Boost.Tupleと同じようにディスパッチするのがいいかなーこれ

2011-01-12 17:18:49
Akira Takahashi @cpp_akira

@decimalbloat いちおうTupleのをコピーして書き換えてます。ただ、Fusion Sequenceはアダプトした型なんかもあるのでvectorとかlistとかで決め打ちできないんですよ。

2011-01-12 17:20:22
でちまるさん(実際かわいい) @decimalbloat

@cpp_akira はい。Fusionのサポートがないのは、そのへんを解決する方法を作れなかったからだと思います。ちなみに私も今、別件で全く同じことで悩んでいるので、おてあげです。

2011-01-12 17:34:36
Akira Takahashi @cpp_akira

んー、これ部分特殊化よりプライマリテンプレートが優先されてるのかなぁ。

2011-01-12 17:38:46
Akira Takahashi @cpp_akira

いや、タグの問題が解決してないのかも。

2011-01-12 17:39:23
Akira Takahashi @cpp_akira

またつまらぬ状態を増やしてしまった。

2011-01-12 17:41:27
でちまるさん(実際かわいい) @decimalbloat

【募集】クラステンプレートFを、テンプレート引数Tについて直接特殊化せずに、Tの性質をメタ関数で書いて特殊化する方法(ただしTについて直接特殊化する場合同様、後からメタ関数による特殊化を追加できる必要がある)

2011-01-12 17:46:46
でちまるさん(実際かわいい) @decimalbloat

@cpp_akira あの特殊化版のほうは、「決して」マッチしないですね

2011-01-12 17:48:27
Akira Takahashi @cpp_akira

あの実装で部分特殊化だけならできてるはずなんだけど、それでなんでディスパッチされないかが意味わからない

2011-01-12 17:48:28
でちまるさん(実際かわいい) @decimalbloat

template<typename T> void f(identity<T>::type); をf(1)で呼び出そうとしているのに似てるかもしれない。

2011-01-12 17:49:56
Akira Takahashi @cpp_akira

んー、しかしこの問題は解決しないと、traitsでのコンセプト的なことがどんどん難しくなる。

2011-01-12 17:51:41
Akira Takahashi @cpp_akira

メタ関数通しても部分特殊化にマッチしてほしいんですが!

2011-01-12 17:52:47
Akira Takahashi @cpp_akira

特殊化する場合でもデフォルトテンプレートパラメータを書かせてください。

2011-01-12 17:58:00
Akira Takahashi @cpp_akira

いや弊害でそうだからだめだ。

2011-01-12 17:58:12
Akira Takahashi @cpp_akira

んー、メタ関数の中に書くと意味ないんだよなー。だから各場所の候補は、テンプレートパラメータの宣言か特殊化かのどっちかなんだよなぁ。

2011-01-12 17:59:13
でちまるさん(実際かわいい) @decimalbloat

fusion::traits::tag_ofの第二引数がenable_if<${Tを用いた述語}>::typeとなってる版の特殊化は、述語が真ならtag_of<T, void>についての特殊化になります。(続く)

2011-01-12 17:59:31
でちまるさん(実際かわいい) @decimalbloat

で、tag_of<T>はtag_of<T, void>のことなので、述語が真ならこの特殊化が使われるということです。

2011-01-12 17:59:37
でちまるさん(実際かわいい) @decimalbloat

同じことを一般化した方法でやろうとすると、enable_ifが成功した時の型を、特殊化ごとに別にしてやらないといけない、ということになりますが、そうしたとしてもtag<T>はtag<T, void>のことなので、そういった特殊化にはマッチしません。そしてこの説明は意味不明。

2011-01-12 18:09:38
Akira Takahashi @cpp_akira

@kikairoya クラステンプレートの特殊化に、enable_ifを使いたいのです。

2011-01-12 18:11:30
でちまるさん(実際かわいい) @decimalbloat

多分これは難しい問題。そうでなければfusionのサポートが入ってないわけがない。

2011-01-12 18:11:52
でちまるさん(実際かわいい) @decimalbloat

@kikairoya それは特殊化する条件が今その場で決定して、concept_mapみたいに後から追加することがないからこそできる技なのです

2011-01-12 18:15:40
若年寄(もう若くない) @kikairoya

@decimalbloat 後から条件が増えてもその条件に合わせて特殊化を新しく書けばいいのでは

2011-01-12 18:18:00
前へ 1 2 ・・ 6 次へ