[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 01/28 12:10 / Filesize : 175 KB / Number-of Response : 739
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Boostを語れゴラァ part3



1 名前:デフォルトの名無しさん [2006/09/23(土) 15:00:11 ]
語って.はぁと part boost::mpl::int_<3> 

前スレ
part 2 pc8.2ch.net/test/read.cgi/tech/1139313234/
part 1 pc8.2ch.net/test/read.cgi/tech/1091198276/

■関連サイト■ 
Boost C++ Libraries 
www.boost.org/ 

Boost 翻訳プロジェクト 
boost.cppll.jp/HEAD/ 

Let's Boost 
www.kmonos.net/alang/boost/ 

boost info 
shinh.skr.jp/boost/ 

152 名前:151 mailto:sage [2006/10/20(金) 21:52:00 ]
メンバ関数のswapがないから
swap(norm_2Functor, function1<float, ublas::vector<float> >(&ublas::norm_2<ublas::vector<float> >));
でないと無理か

そもそもできるかどうか知らんけど

153 名前:デフォルトの名無しさん mailto:sage [2006/10/20(金) 22:03:06 ]
腐ったコンパイラでなんとかしようという努力は不毛だぜ

154 名前:デフォルトの名無しさん mailto:sage [2006/10/20(金) 22:38:40 ]
>>152
そもそも一時オブジェクトをswapの引数にはできん

155 名前:デフォルトの名無しさん mailto:sage [2006/10/20(金) 23:17:36 ]
>>154
--->?swap技法?

156 名前:デフォルトの名無しさん mailto:sage [2006/10/21(土) 00:24:57 ]
中国人は帰れよ

157 名前:デフォルトの名無しさん mailto:sage [2006/10/21(土) 00:43:07 ]
>>155
意味不明

158 名前:デフォルトの名無しさん mailto:sage [2006/10/21(土) 00:43:28 ]
>>154
vectorが確保するメモリを要素数ぴったりに合わせるテクニックで
x.swap(std::vector<T>(x));
ってのがあったと思うけど、これもダメなの?

159 名前:デフォルトの名無しさん mailto:sage [2006/10/21(土) 00:46:06 ]
一時オブジェクトをswapの引数にするのは何も問題ない(ちゃんとしたコンパイラなら)

160 名前:デフォルトの名無しさん mailto:sage [2006/10/21(土) 00:50:03 ]
constでない参照引数に一時オブジェクトはダメじゃなかったっけ?



161 名前:デフォルトの名無しさん mailto:sage [2006/10/21(土) 01:01:03 ]
>>158
VC++2003で警告レベルを最高にするとwarningになるな。

162 名前:デフォルトの名無しさん mailto: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);は通った。
何じゃこりゃ。

163 名前:デフォルトの名無しさん mailto:sage [2006/10/21(土) 02:05:58 ]
>>158
swap技法はstd::vector<T>(x).swap(x);じゃない?

164 名前:デフォルトの名無しさん mailto: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なメンバ関数を呼べてしまう。

165 名前:デフォルトの名無しさん mailto:sage [2006/10/21(土) 08:54:42 ]
>>158
お前何にもわかってないのな

>>159
馬鹿確定

166 名前:デフォルトの名無しさん mailto:sage [2006/10/21(土) 10:01:26 ]
あ、一時オブジェクトに対して非constメンバを呼ぶのはいいのか。

167 名前:デフォルトの名無しさん mailto: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の)第二引数を渡し、最終結果を得たいという感じです。

168 名前:167 mailto:sage [2006/10/21(土) 21:20:16 ]
fをgに変換する方法でも結構です。
よろしくおながいします


169 名前:デフォルトの名無しさん mailto:sage [2006/10/21(土) 21:44:22 ]
>>167
どうしてもその変換をしないと駄目?
第一引数が既にあるならそれを部分適用することは簡単なんだが。

170 名前:デフォルトの名無しさん mailto: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';
}



171 名前:167 mailto:sage [2006/10/21(土) 22:05:15 ]
>>169
第一引数の部分適用が簡単なのは承知しているのですが…変換希望です。



172 名前:167 mailto:sage [2006/10/21(土) 22:23:29 ]
>170
ありがとうございます。やってみます。


173 名前:デフォルトの名無しさん mailto:sage [2006/10/21(土) 23:04:05 ]
boost::bindでもいけるね

174 名前:デフォルトの名無しさん mailto:sage [2006/10/21(土) 23:10:30 ]
>>173
いってみてよ

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です

176 名前:デフォルトの名無しさん mailto:sage [2006/10/22(日) 01:12:24 ]
>>175
boost::bind(static_cast<int (*)(int, int)>(foo), _1, 100)

177 名前:デフォルトの名無しさん mailto: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型があるなしで選択するとかは。

178 名前:デフォルトの名無しさん mailto:sage [2006/10/22(日) 12:42:09 ]
>>177
は?

179 名前:デフォルトの名無しさん mailto:sage [2006/10/22(日) 12:43:22 ]
>>177
175は関数テンプレートな訳だが..


180 名前:177 mailto: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);
こんな感じでキャストを使わない方法の案を提供したかったわけですよ。



181 名前:デフォルトの名無しさん mailto:sage [2006/10/22(日) 13:39:27 ]
キャストを使わないでそれを使うことに何の意味があるの?

あと、>177のように何の前置きにもなしに言って、理解してくれるエスパーだと思ったの?

182 名前:177 mailto:sage [2006/10/22(日) 13:55:49 ]
>>181
キャストを使わない。
キャストを使ったときに起きるテンプレート関数の特殊化に対しての曖昧性をなくせる(たぶん)。

> あと、>177のように何の前置きにもなしに言って、理解してくれるエスパーだと思ったの?
タイピングの勢いだ。

183 名前:デフォルトの名無しさん mailto:sage [2006/10/22(日) 14:28:28 ]
> キャストを使ったときに起きるテンプレート関数の特殊化に対しての曖昧性
具体例が欲しいな


184 名前:デフォルトの名無しさん mailto:sage [2006/10/22(日) 15:58:19 ]
boost::lambdaのunlambdaとprotectがよくわからないんだぜ



185 名前:デフォルトの名無しさん mailto: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で使いたい場合
このオーバーロードの解決には結局、関数オブジェクトが手っ取り早いと思います。

186 名前:デフォルトの名無しさん mailto:sage [2006/10/22(日) 17:13:50 ]
>>185
それ、曖昧か?
後者は foo() についてポインタ型を扱う場合の特殊化を宣言しているので、
引数の型に応じて定義が使い分けられるだけじゃないの?

↓キャストでもコンパイルできたし。

int a, b;
(static_cast<int (*)(int*, int*)>(foo))(&a, &b);

187 名前:185 mailto:sage [2006/10/22(日) 17:59:14 ]
>>186
boost::bindは?

188 名前:デフォルトの名無しさん mailto:sage [2006/10/22(日) 18:02:01 ]
>>187
boost::bind(static_cast<int (*)(int*, int*)>(foo), _1, &b)(&a);
これぐらい自分で補完しろよ。

189 名前:デフォルトの名無しさん mailto:sage [2006/10/22(日) 18:35:54 ]
>>188
コンパイル出来るんだ。へぇー。

190 名前:デフォルトの名無しさん mailto:sage [2006/10/22(日) 19:04:01 ]
がんばって早く「ごめんなさい」の言える大人になろーね。



191 名前:デフォルトの名無しさん mailto:sage [2006/10/22(日) 19:23:43 ]
ごめんなさい

192 名前:デフォルトの名無しさん mailto:sage [2006/10/22(日) 19:40:14 ]
>>190
だって食い下がって逆撫でしていれば
>>188みたいな知識ひけらかし大好き君が無償で色々書いてくれるんだもん。
こういう子は利用しない手はないって。

193 名前:デフォルトの名無しさん mailto:sage [2006/10/22(日) 19:57:34 ]
>>192
普通に質問すればいいのに、なんでわざわざそんな手段をとる必要がある?

194 名前:デフォルトの名無しさん mailto:sage [2006/10/22(日) 20:19:00 ]
回答をもらえる確率が上がるから。

195 名前:デフォルトの名無しさん mailto:sage [2006/10/22(日) 20:25:02 ]
まぁ、スレを客観的に眺めると、知識ひけらかし大好き君は>177と分かるんだけどね。
>176で終わってる質問だし。

それに>188の知識は>176以上のものではないし。
散々引っ張っといて同じモノしか出ないんじゃ、割に合わない。

単純に悔しくなった>177君が利用してやった振りしてるだけ。

196 名前:デフォルトの名無しさん mailto:sage [2006/10/22(日) 20:47:18 ]
>>182 に「たぶん」って書いてあるのは、ただの妄想ってことでいいの?

197 名前:189 mailto:sage [2006/10/22(日) 23:35:55 ]
>>188
ごめん。
だれもつっこんでくれないから寝る前に一言
> boost::bind(static_cast<int (*)(int*, int*)>(foo), _1, &b)(&a);
ちょっと言い訳・・・・「&a」参照の罠に嵌ってました。以上です。では、おやすみ。

198 名前:デフォルトの名無しさん mailto:sage [2006/10/25(水) 18:14:32 ]
std::map みたいに扱えて、実はバックエンドがデータベースだなんて
すてきな使い心地のライブラリって無いものでしょうか。


199 名前:デフォルトの名無しさん mailto:sage [2006/10/25(水) 19:42:34 ]
boost::graph

ASLの adobe::forest
が車輪の再発明ぽい点について

200 名前:デフォルトの名無しさん mailto:sage [2006/10/25(水) 20:28:36 ]
ASL かわいいよ ASL



201 名前:デフォルトの名無しさん mailto:sage [2006/10/25(水) 23:26:50 ]
あるあ…(ry >198

202 名前:デフォルトの名無しさん mailto:sage [2006/10/26(木) 00:02:53 ]
>>201 あるんですか?
なんて言うライブラリか教えて貰えませんか?
今、std::map を boost::serialization でディスクに書き出しているんですが、
かなりデータ量が大きくなってきて、すべてをオンメモリで処理するのが
苦しくなってきました。

203 名前:デフォルトの名無しさん mailto:sage [2006/10/26(木) 03:11:33 ]
AllegroCache. これ最強。

204 名前:デフォルトの名無しさん mailto:sage [2006/10/26(木) 09:38:05 ]
boostいいね。使っているとスルメみたいに味わい深いわ。
しかし古い設計で組んでいた俺の昔のコードは一体何だったんだと。 orz

205 名前:デフォルトの名無しさん mailto:sage [2006/10/26(木) 11:07:28 ]
STLぽい数式処理と数値計算のできるライブラリーってないでしょうか?
せめて多項式か2次式だけでもできると
少し数値計算プログラムが楽になる

206 名前:デフォルトの名無しさん mailto:sage [2006/10/26(木) 15:38:08 ]
ASLの
adobe::dictionary_t
はstd::mapよりたくさん要素あつかえるとかtutorialに書いてあった


207 名前:デフォルトの名無しさん mailto:sage [2006/10/26(木) 16:19:02 ]
>>198
Berkeley DBでも使え。

208 名前:201 mailto:sage [2006/10/27(金) 00:43:04 ]
ねーよ


209 名前:デフォルトの名無しさん mailto:sage [2006/10/27(金) 08:40:10 ]
>>201>>208
馬鹿?


210 名前:デフォルトの名無しさん mailto:sage [2006/10/27(金) 11:05:09 ]
>>198
つlibstldb4



211 名前:デフォルトの名無しさん mailto:sage [2006/10/27(金) 16:20:16 ]
>>198
なぜ boost スレへ?

212 名前:デフォルトの名無しさん mailto:age [2006/10/27(金) 20:13:30 ]
std::plus()はreturn a+b;ですが、return a+=b;してくれる関数オブジェクトは無いでしょうか?
手前で作ればいいのですが、boostにあるならそっちをつかいたく。

213 名前:デフォルトの名無しさん mailto:sage [2006/10/27(金) 20:57:59 ]
_1 += _2

214 名前:デフォルトの名無しさん mailto:sage [2006/10/27(金) 21:06:44 ]
>213
それはコンパイルできんだろ..

215 名前:デフォルトの名無しさん mailto:sage [2006/10/27(金) 21:11:33 ]
class MyPlus : public std::plus,
boost::addable< point<T>
, boost::subtractable< point<T>
>
{
MyPlus operator+=(const MyPlus&);
};

でいけたらいいな

216 名前:デフォルトの名無しさん mailto:sage [2006/10/27(金) 21:16:44 ]
>>214
using namespace boost::lambda;

217 名前:デフォルトの名無しさん mailto:sage [2006/10/27(金) 21:23:35 ]
std::accumulate は?

218 名前:217 mailto:sage [2006/10/27(金) 21:25:48 ]
あ、関数オブジェクトじゃなかったorz

219 名前:デフォルトの名無しさん mailto:sage [2006/10/27(金) 21:30:13 ]
>>216 +=はオーバーロードされていないと思うが。

220 名前:デフォルトの名無しさん mailto:sage [2006/10/27(金) 21:38:25 ]
んなあほな。
複合代入演算子はクラスの外からでも多重定義できるのだから、
boost::lambdaで使えないわけが無い。



221 名前:デフォルトの名無しさん mailto:sage [2006/10/27(金) 21:42:58 ]
+=は使える。
クラス外から多重定義できるかどうかは関係ないような。

222 名前:212 mailto:sage [2006/10/27(金) 21:51:39 ]
>>213
できました。ありがとう

223 名前:デフォルトの名無しさん mailto:sage [2006/10/27(金) 21:52:36 ]
そうか、_1なんかはそれ自身ラムダオブジェクトだったな。

224 名前:デフォルトの名無しさん mailto:sage [2006/10/27(金) 23:28:35 ]
>>219
死ねカス

225 名前:デフォルトの名無しさん mailto:sage [2006/10/30(月) 18:40:49 ]
話題が無いな

226 名前:デフォルトの名無しさん mailto:sage [2006/10/30(月) 18:54:49 ]
話題ねぇ…

opensource.adobe.com/gil/

今レビューされている、Generic Image Library が通れば、
各種画像サポートが実現されるわけで、非常に期待してる。

227 名前:デフォルトの名無しさん mailto:sage [2006/10/30(月) 20:09:51 ]
ほお adobeがopensourceとは..

228 名前:デフォルトの名無しさん mailto:sage [2006/10/30(月) 22:09:56 ]
通ればってどういうこと?

229 名前:デフォルトの名無しさん mailto:sage [2006/10/30(月) 22:14:22 ]
ttp://lists.boost.org/Archives/boost/2006/10/111131.php

ちうこと。

230 名前:デフォルトの名無しさん mailto:sage [2006/10/30(月) 22:29:06 ]
adobe ASLで
japan.zdnet.com/news/devsys/story/0,2000056182,20082134,00.htm
ユーザーインターフェイスの自動生成?
本当にできるの?



231 名前:デフォルトの名無しさん mailto:sage [2006/10/30(月) 22:31:59 ]
なぜvigraじゃなくてgilなんだ
機能の豊富さからいったらvigraが上だろう
kogs-www.informatik.uni-hamburg.de/~koethe/vigra/


232 名前:デフォルトの名無しさん mailto:sage [2006/10/30(月) 22:42:28 ]
>>231
作者がboostに提案したか否かだろ

233 名前:デフォルトの名無しさん mailto:sage [2006/10/30(月) 23:51:16 ]
>>230
発表された頃に斜め読みした限りでは
プログラマとデザイナで仕事を分離するという程度の内容だったような?


234 名前:デフォルトの名無しさん [2006/10/31(火) 01:39:42 ]
>>232
どの記事だったか忘れたけど

>vigraのほうが好きだけど,vigraは作者が一人だし、gilが採択されたら
>その作者がんばるだろうからいいじゃん
とか書いてあった


235 名前:234 mailto:sage [2006/10/31(火) 01:41:27 ]
>>234
lists.boost.org/Archives/boost/2006/10/112316.php
これこれ


236 名前:デフォルトの名無しさん mailto:sage [2006/10/31(火) 03:07:04 ]
やる気のない実装を見るとRejectされそうだけどな

237 名前:デフォルトの名無しさん mailto:sage [2006/10/31(火) 12:11:48 ]
lists.boost.org/Archives/boost/2006/10/112534.php
VC7.1でコンパイルとおらねえじゃねえかよ
同じとこでこけやがる

238 名前:デフォルトの名無しさん mailto:sage [2006/10/31(火) 18:46:57 ]
LinuxのGCCでワイド文字全般がうまく機能しないです。
gcc3.3.6
libstdc++3.3.6

boostでなんとかなりませんか?

wcout << L"てれれのレ";
[****@ **] (沈黙)

239 名前:デフォルトの名無しさん mailto:sage [2006/10/31(火) 18:51:43 ]
端末の文字コードが間違っているなんてこと無いよね?

240 名前:デフォルトの名無しさん mailto:sage [2006/10/31(火) 19:18:04 ]
ないです。



241 名前:デフォルトの名無しさん mailto:sage [2006/10/31(火) 19:24:22 ]
出力をパイプでod -tx1に流して16進で見ても、やはり

[****@ **]./a.out | od -tx1
0000000 (沈黙)

242 名前:デフォルトの名無しさん mailto:sage [2006/10/31(火) 19:41:44 ]
pc8.2ch.net/test/read.cgi/tech/1143375639/294-304
これと同じ問題?

243 名前:デフォルトの名無しさん mailto:sage [2006/10/31(火) 19:52:16 ]
gccのバージョン上げろ

244 名前:デフォルトの名無しさん mailto:sage [2006/10/31(火) 20:25:51 ]
つまり L をコンパイラがまともに処理してくれていない?

245 名前:デフォルトの名無しさん mailto:sage [2006/10/31(火) 20:58:26 ]
そうだよ。-Sでアセンブラ出力みてみ。

246 名前:デフォルトの名無しさん mailto:sage [2006/10/31(火) 21:14:59 ]
バージョンの問題なのか?

247 名前:デフォルトの名無しさん mailto:sage [2006/10/31(火) 21:39:46 ]
>>2.4.6
--input-charsetが3.4からだから、そうだと思うんだけど。

248 名前:デフォルトの名無しさん mailto:sage [2006/10/31(火) 21:40:21 ]
あかん、アンカーがorz

249 名前:デフォルトの名無しさん mailto:sage [2006/10/31(火) 23:02:31 ]
>>248 誰がうまいこと言えと

250 名前:デフォルトの名無しさん mailto:あげ [2006/11/01(水) 01:37:53 ]
function<int (int)> hohe(int x)
{
return boost::lambda::_1 +x;
}
でxを延命させるうまい方法はありますか? 別途関数を作ってbindとか、
plus<int>()にbindあたりはナシで。



251 名前:デフォルトの名無しさん mailto:sage [2006/11/01(水) 01:48:57 ]
>>250
延命も何も、λ式に保持されるのはその時点でのxの値で、
xへの参照ではないから、xの寿命を気にする必要はない。

252 名前:デフォルトの名無しさん mailto:sage [2006/11/01(水) 04:26:38 ]
gcc3.4 gcc4.0.2で試したらワイド文字関係がすこぶる正常。
結局バージョンの問題か。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<175KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef