[過去ログ] Boostを語れゴラァ part3 (1001レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
172: 167 2006/10/21(土)22:23 AAS
>170
ありがとうございます。やってみます。
173(1): 2006/10/21(土)23:04 AAS
boost::bindでもいけるね
174: 2006/10/21(土)23:10 AAS
>>173
いってみてよ
175(3): 2006/10/22(日)01:05 AAS
template <typename A, typename B, typename C> int foo(A a, B b, C c) { return 0; }
template <typename A, typename B> int foo(A a, B b) { return 0; }
に対して、後者の関数をbindするつもりで
boost::bind(foo<int,int _1, 100);
すると、no matching function for call to ‘bind(<unresolved overloaded function type boost::arg<1>&, int)’
とか言われてしまうんだが、これって回避策ありますか?
gcc4.1です
176(1): 2006/10/22(日)01:12 AAS
>>175
boost::bind(static_cast<int (*)(int, int)>(foo), _1, 100)
177(5): 2006/10/22(日)12:38 AAS
>>175
class Void{}Void_v;
template<class T1, class T2, class T3=Void>struct select_f;
の特殊化を作ってfooの引数にVoid型があるなしで選択するとかは。
178: 2006/10/22(日)12:42 AAS
>>177
は?
179(1): 2006/10/22(日)12:43 AAS
>>177
175は関数テンプレートな訳だが..
180: 177 2006/10/22(日)13:30 AAS
>>179
えーと、あいまいな関数オーバーロードの解決にはキャストあたりが手っ取り早いと思うけど
そこで、
template <typename A, typename B, typename C>
int foo(A a, B b, C c) { return select_f<A, B, C>()(a, b, c); }// put away foo else
・・・
boost::bind(foo<int,int, Void _1, 100, Void_v);
こんな感じでキャストを使わない方法の案を提供したかったわけですよ。
181(1): 2006/10/22(日)13:39 AAS
キャストを使わないでそれを使うことに何の意味があるの?
あと、>177のように何の前置きにもなしに言って、理解してくれるエスパーだと思ったの?
182(1): 177 2006/10/22(日)13:55 AAS
>>181
キャストを使わない。
キャストを使ったときに起きるテンプレート関数の特殊化に対しての曖昧性をなくせる(たぶん)。
> あと、>177のように何の前置きにもなしに言って、理解してくれるエスパーだと思ったの?
タイピングの勢いだ。
183(1): 2006/10/22(日)14:28 AAS
> キャストを使ったときに起きるテンプレート関数の特殊化に対しての曖昧性
具体例が欲しいな
184: 2006/10/22(日)15:58 AAS
boost::lambdaのunlambdaとprotectがよくわからないんだぜ
185(2): 2006/10/22(日)16:38 AAS
>>183
たとえば、>175を
template <typename A, typename B> int foo(A a, B b); (b)
template<class A, class B>int foo(A*,B*); (c)
こんな(c)を追加して、(c)or(b)のどちらかをbindで使いたい場合
このオーバーロードの解決には結局、関数オブジェクトが手っ取り早いと思います。
186(1): 2006/10/22(日)17:13 AAS
>>185
それ、曖昧か?
後者は foo() についてポインタ型を扱う場合の特殊化を宣言しているので、
引数の型に応じて定義が使い分けられるだけじゃないの?
↓キャストでもコンパイルできたし。
int a, b;
(static_cast<int (*)(int*, int*)>(foo))(&a, &b);
187(1): 185 2006/10/22(日)17:59 AAS
>>186
boost::bindは?
188(4): 2006/10/22(日)18:02 AAS
>>187
boost::bind(static_cast<int (*)(int*, int*)>(foo), _1, &b)(&a);
これぐらい自分で補完しろよ。
189(1): 2006/10/22(日)18:35 AAS
>>188
コンパイル出来るんだ。へぇー。
190(1): 2006/10/22(日)19:04 AAS
がんばって早く「ごめんなさい」の言える大人になろーね。
191: 2006/10/22(日)19:23 AAS
ごめんなさい
192(1): 2006/10/22(日)19:40 AAS
>>190
だって食い下がって逆撫でしていれば
>>188みたいな知識ひけらかし大好き君が無償で色々書いてくれるんだもん。
こういう子は利用しない手はないって。
193: 2006/10/22(日)19:57 AAS
>>192
普通に質問すればいいのに、なんでわざわざそんな手段をとる必要がある?
194: 2006/10/22(日)20:19 AAS
回答をもらえる確率が上がるから。
195: 2006/10/22(日)20:25 AAS
まぁ、スレを客観的に眺めると、知識ひけらかし大好き君は>177と分かるんだけどね。
>176で終わってる質問だし。
それに>188の知識は>176以上のものではないし。
散々引っ張っといて同じモノしか出ないんじゃ、割に合わない。
単純に悔しくなった>177君が利用してやった振りしてるだけ。
196: 2006/10/22(日)20:47 AAS
>>182 に「たぶん」って書いてあるのは、ただの妄想ってことでいいの?
197: 189 2006/10/22(日)23:35 AAS
>>188
ごめん。
だれもつっこんでくれないから寝る前に一言
> boost::bind(static_cast<int (*)(int*, int*)>(foo), _1, &b)(&a);
ちょっと言い訳・・・・「&a」参照の罠に嵌ってました。以上です。では、おやすみ。
198(4): 2006/10/25(水)18:14 AAS
std::map みたいに扱えて、実はバックエンドがデータベースだなんて
すてきな使い心地のライブラリって無いものでしょうか。
199: 2006/10/25(水)19:42 AAS
boost::graph
と
ASLの adobe::forest
が車輪の再発明ぽい点について
200: 2006/10/25(水)20:28 AAS
ASL かわいいよ ASL
201(3): 2006/10/25(水)23:26 AAS
あるあ…(ry >198
上下前次1-新書関写板覧索設栞歴
あと 800 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.013s