[過去ログ]
Boostを語れゴラァ part3 (1001レス)
Boostを語れゴラァ part3 http://echo.5ch.net/test/read.cgi/tech/1158991211/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
162: デフォルトの名無しさん [sage] 2006/10/21(土) 01:27:59 23.1 Container requirementsによればa.swap(b)とswap(a,b)は同じで、 25.2.2 Swapによれば template<class T> void swap(T& a, T& b); 1 Requires: Type T is Assignable. とあるから、できないんじゃね? と思ってx.swap(std::vector<T>(x));とやったらVC++2005でエラーになった。 と思ったらstd::vector<int>(x).swap(x);は通った。 何じゃこりゃ。 http://echo.5ch.net/test/read.cgi/tech/1158991211/162
163: デフォルトの名無しさん [sage] 2006/10/21(土) 02:05:58 >>158 swap技法はstd::vector<T>(x).swap(x);じゃない? http://echo.5ch.net/test/read.cgi/tech/1158991211/163
164: デフォルトの名無しさん [sage] 2006/10/21(土) 07:43:54 >>162 template<class T> void swap(T& a, T& b); はaもbも非const参照だから、一時オブジェクトを受け付けない。 std::vector<int>(x).swap(x);は、 std::vector<int>(x)が一時オブジェクトだが非constなので、非constなメンバ関数を呼べてしまう。 http://echo.5ch.net/test/read.cgi/tech/1158991211/164
165: デフォルトの名無しさん [sage] 2006/10/21(土) 08:54:42 >>158 お前何にもわかってないのな >>159 馬鹿確定 http://echo.5ch.net/test/read.cgi/tech/1158991211/165
166: デフォルトの名無しさん [sage] 2006/10/21(土) 10:01:26 あ、一時オブジェクトに対して非constメンバを呼ぶのはいいのか。 http://echo.5ch.net/test/read.cgi/tech/1158991211/166
167: デフォルトの名無しさん [haskell厨] 2006/10/21(土) 21:13:06 int add(int a,int b){return a+b;} があるとして、 boost::function<int (int,int)> f = add; はコンパイルできるわけですが、 boost::function<boost::function<int,int> (int)> g = add; のようなことがしたい場合はどうし たらよいでしょうか?addを、int->int->int ではなく int-> (int->int) として扱いたいというか。 gに、あとで(addの)第一引数を渡して、boost::function<int,int>型の関数オブジェクトを得て、 更にその後で(addの)第二引数を渡し、最終結果を得たいという感じです。 http://echo.5ch.net/test/read.cgi/tech/1158991211/167
168: 167 [sage] 2006/10/21(土) 21:20:16 fをgに変換する方法でも結構です。 よろしくおながいします http://echo.5ch.net/test/read.cgi/tech/1158991211/168
169: デフォルトの名無しさん [sage] 2006/10/21(土) 21:44:22 >>167 どうしてもその変換をしないと駄目? 第一引数が既にあるならそれを部分適用することは簡単なんだが。 http://echo.5ch.net/test/read.cgi/tech/1158991211/169
170: デフォルトの名無しさん [sage] 2006/10/21(土) 22:05:03 思った程大変じゃなかった。 # include <boost/function.hpp> # include <boost/lambda/lambda.hpp> # include <boost/lambda/bind.hpp> # include <iostream> # include <functional> namespace lam = boost::lambda; int main(void) { typedef boost::function<int (int, int)> f_type; f_type f = std::plus<int>(); boost::function<boost::function<int (int)> (int) > g = lam::bind(std::bind1st<f_type, int>, f, lam::_1); std::cout << g(7)(2) << '\n'; } http://echo.5ch.net/test/read.cgi/tech/1158991211/170
171: 167 [sage] 2006/10/21(土) 22:05:15 >>169 第一引数の部分適用が簡単なのは承知しているのですが…変換希望です。 http://echo.5ch.net/test/read.cgi/tech/1158991211/171
172: 167 [sage] 2006/10/21(土) 22:23:29 >170 ありがとうございます。やってみます。 http://echo.5ch.net/test/read.cgi/tech/1158991211/172
173: デフォルトの名無しさん [sage] 2006/10/21(土) 23:04:05 boost::bindでもいけるね http://echo.5ch.net/test/read.cgi/tech/1158991211/173
174: デフォルトの名無しさん [sage] 2006/10/21(土) 23:10:30 >>173 いってみてよ http://echo.5ch.net/test/read.cgi/tech/1158991211/174
175: デフォルトの名無しさん [] 2006/10/22(日) 01:05:59 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です http://echo.5ch.net/test/read.cgi/tech/1158991211/175
176: デフォルトの名無しさん [sage] 2006/10/22(日) 01:12:24 >>175 boost::bind(static_cast<int (*)(int, int)>(foo), _1, 100) http://echo.5ch.net/test/read.cgi/tech/1158991211/176
177: デフォルトの名無しさん [sage] 2006/10/22(日) 12:38:25 >>175 class Void{}Void_v; template<class T1, class T2, class T3=Void>struct select_f; の特殊化を作ってfooの引数にVoid型があるなしで選択するとかは。 http://echo.5ch.net/test/read.cgi/tech/1158991211/177
178: デフォルトの名無しさん [sage] 2006/10/22(日) 12:42:09 >>177 は? http://echo.5ch.net/test/read.cgi/tech/1158991211/178
179: デフォルトの名無しさん [sage] 2006/10/22(日) 12:43:22 >>177 175は関数テンプレートな訳だが.. http://echo.5ch.net/test/read.cgi/tech/1158991211/179
180: 177 [sage] 2006/10/22(日) 13:30:36 >>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); こんな感じでキャストを使わない方法の案を提供したかったわけですよ。 http://echo.5ch.net/test/read.cgi/tech/1158991211/180
181: デフォルトの名無しさん [sage] 2006/10/22(日) 13:39:27 キャストを使わないでそれを使うことに何の意味があるの? あと、>177のように何の前置きにもなしに言って、理解してくれるエスパーだと思ったの? http://echo.5ch.net/test/read.cgi/tech/1158991211/181
182: 177 [sage] 2006/10/22(日) 13:55:49 >>181 キャストを使わない。 キャストを使ったときに起きるテンプレート関数の特殊化に対しての曖昧性をなくせる(たぶん)。 > あと、>177のように何の前置きにもなしに言って、理解してくれるエスパーだと思ったの? タイピングの勢いだ。 http://echo.5ch.net/test/read.cgi/tech/1158991211/182
183: デフォルトの名無しさん [sage] 2006/10/22(日) 14:28:28 > キャストを使ったときに起きるテンプレート関数の特殊化に対しての曖昧性 具体例が欲しいな http://echo.5ch.net/test/read.cgi/tech/1158991211/183
184: デフォルトの名無しさん [sage] 2006/10/22(日) 15:58:19 boost::lambdaのunlambdaとprotectがよくわからないんだぜ http://echo.5ch.net/test/read.cgi/tech/1158991211/184
185: デフォルトの名無しさん [sage] 2006/10/22(日) 16:38:15 >>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で使いたい場合 このオーバーロードの解決には結局、関数オブジェクトが手っ取り早いと思います。 http://echo.5ch.net/test/read.cgi/tech/1158991211/185
186: デフォルトの名無しさん [sage] 2006/10/22(日) 17:13:50 >>185 それ、曖昧か? 後者は foo() についてポインタ型を扱う場合の特殊化を宣言しているので、 引数の型に応じて定義が使い分けられるだけじゃないの? ↓キャストでもコンパイルできたし。 int a, b; (static_cast<int (*)(int*, int*)>(foo))(&a, &b); http://echo.5ch.net/test/read.cgi/tech/1158991211/186
187: 185 [sage] 2006/10/22(日) 17:59:14 >>186 boost::bindは? http://echo.5ch.net/test/read.cgi/tech/1158991211/187
188: デフォルトの名無しさん [sage] 2006/10/22(日) 18:02:01 >>187 boost::bind(static_cast<int (*)(int*, int*)>(foo), _1, &b)(&a); これぐらい自分で補完しろよ。 http://echo.5ch.net/test/read.cgi/tech/1158991211/188
189: デフォルトの名無しさん [sage] 2006/10/22(日) 18:35:54 >>188 コンパイル出来るんだ。へぇー。 http://echo.5ch.net/test/read.cgi/tech/1158991211/189
190: デフォルトの名無しさん [sage] 2006/10/22(日) 19:04:01 がんばって早く「ごめんなさい」の言える大人になろーね。 http://echo.5ch.net/test/read.cgi/tech/1158991211/190
191: デフォルトの名無しさん [sage] 2006/10/22(日) 19:23:43 ごめんなさい http://echo.5ch.net/test/read.cgi/tech/1158991211/191
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 810 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.008s