1 名前:デフォルトの名無しさん [2009/01/19(月) 21:22:22 ] 過去スレ part 6 pc11.2ch.net/test/read.cgi/tech/1207749841/ part 5 pc11.2ch.net/test/read.cgi/tech/1192662575/ part 4 pc11.2ch.net/test/read.cgi/tech/1175663346/ part 3 pc11.2ch.net/test/read.cgi/tech/1158991211/ 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/
242 名前:デフォルトの名無しさん [2009/03/21(土) 15:18:52 ] >>241 うまくいきました。 dereference()して値を変えたい場合は、ポインターなどにしてやる必要があるんですね。 >const メンバ関数なので this は const step_iterator*。 >従って、メンバの value も const int になります。 >これは変更不可能なので、変更可能な参照 int& として返すことができません 調べてると、「mutableでないと駄目」とか書いてあったけど、↑のことだったのか・・・
243 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 15:58:49 ] >>238 recv_fromはbindでポートと結びついてるソケットで読み込んでるからでないの?
244 名前:238 [2009/03/21(土) 16:17:09 ] >>239 UDPでは(?)どのポートに来たメッセージも受信できちゃうってことですか? >>243 bind()ではポート番号とか渡してないみたい
245 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 18:27:28 ] >244 send_toの時にバインドされてる
246 名前:238 mailto:sage [2009/03/22(日) 08:53:20 ] >>245 やっぱそうなのか この辺で失礼します。ありがとう
247 名前:デフォルトの名無しさん [2009/03/22(日) 18:01:34 ] vc2008EE sp1 winxp boost1.38(boostpro)で int x = 1, y = 10; (boost::lambda::_1 + boost::lambda::protect(boost::lambda::_1 + 2))(x)(y); がコンパイル通らないんだけど、なんで? error C2664: 'boost::lambda::lambda_functor<T>::lambda_functor(const boost::lambda::lambda_functor<T> &)' : 1 番目の引数を 'const boost::lambda::lambda_functor<T>' から 'const boost::lambda::lambda_functor<T> &' に変換できません。
248 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 18:57:14 ] とりあえず解決法だけ (x)を(boost::cref(x))にする(refでもおk) gcc-4.4, boost trunkで動作確認できた
249 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 21:42:42 ] Boostライブラリって同じ機能・もしくはちょっと違う機能のついた別クラスが 多い. こういうとこ改善しないのかな?
250 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 21:59:52 ] >>249 具体的にどれのこと?全部挙げなくて良いからさ。 あと、改善しないのか気になるんなら、直接提案してみれば良いよ。
251 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 22:22:20 ] 249じゃないけど、bindとlambda::bindとかtupleとfusionとか これまで書かれたコードがあるから一本化できないんだろ どっちかが非推奨になることはあるかもしれんが boostのライブラリは便利だけど、組み合わせようとするとあれ?ってなる感じがする。 lambdaはresult_ofに対応したんだっけ?
252 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 22:33:56 ] boost/functionを使うときにはたいていboost/bindも使うとか 文字列処理クラスが機能かぶってるとかのことを言ってるのか? おれは↑と他ちょっとしかboostしないから知らないけどなんかあんの?
253 名前:247 [2009/03/22(日) 22:46:02 ] boost::protect の一番わかりやすい(シンプルな) サンプルコード教えてください。 (boost::protectの有無で結果変わるやつ)
254 名前:232 mailto:sage [2009/03/24(火) 22:59:56 ] >>233-235 直らなかったので、ソースを調べました。 コンパイラのバージョンチェックがまずかったようです。 boost/foreach.hppの頭のほうの行の || BOOST_WORKAROUND(BOOST_INTEL_WIN, <= 810) を、以下のように変えたらコンパイラが通りました。 || BOOST_WORKAROUND(BOOST_INTEL_WIN, <= 1100) とりあえず、これで様子見です。
255 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 22:43:50 ] 更新しました。 ttp://booster.x0.to/ 以下更新内容の一部 [Fusion] added default implementation for iterator_facade [Math] Fix bug in cyl_bessel_i that hits when v=0.5 and x is small. [Archive] Throw new exception when program class version is less than file class version. [Serialization] moved to type traits [Smart_ptr] Move enable_shared_from_this2.hpp to boost/smart_ptr. [Timer] Fix spelling boo boo (Shawn Roe) [Regex] Patch for ICU on AIX. [Type_traits] Added has_new_operator from Robert Ramey. [Filesystem] System, Filesystem: remove boost/detail/test_framework.hpp; use boost/detail/lightweight_test.hpp instead (Thanks to Peter Dimov for pointing this out) [Units] Fix return type for division by a constant [Tr1] shared_count.hpp has moved. [Interprocess] Changes for Boost.1.39 [Intrusive] Changes for Boost.1.39 [Bind] Add ref_compare for weak_ptr. Refs #2849.
256 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 16:52:31 ] Spirit使っている人に聞きたいです。 eps_pを使うと括弧を減らせるみたいらしいですが、 俺的にはeps_pを使うよか括弧を使う方が分かりやすいと思うんです。 みさなんはどう思いますか?
257 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 19:26:02 ] ウロ覚えだが括弧の中に括弧がネストしてる場合もちゃんと処理してくれるんじゃなかったっけ
258 名前:256 mailto:sage [2009/03/28(土) 19:31:45 ] >>257 そー言われれば、括弧のネストを解消して括弧の数を減らせるな。 …あと、見やすいかどうかは主観に寄るよなやっぱ。
259 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 01:38:49 ] Spiritに関して パーザーPARがあったとして、PARにマッチしないって言うのを表すにはどう書けばいい? 具体的には boost::spirit::sign_p にマッチしないって言うのを表したかったのだが、 ~boost::spirit::sign_p とやったらoperator~はsign_pには定義されていないよっていうエラーがでるんだけど・・・。
260 名前:259 mailto:sage [2009/03/29(日) 01:54:34 ] boost::spirit::anychar_p-boost::spirit::sign_p で良かったか。 事故解決した気がするが、これで間違っていたら教えてくれ。
261 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 14:41:25 ] >>260 手っ取り早い方法だとそれで良いと思う。 ただ、anychar_p sign_pの両方が評価されるので、 -を使った方法は多用しまくると効率悪いかもね。 <この例なら気にならないだろうけど
262 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 14:41:39 ] Spiritにて expr= ( +(boost::spirit::digit_p)//[&the_func] >> *( (boost::spirit::ch_p('!'))//[&the_func] ) )//[&the_func] この3カ所にセマンティックアクション void the_func(const char* const, const char* const) を入れたかった。しかし実際やってみると 3つ目のthe_funcの場所「以外」入れられずコンパイルエラーになる。 何で?
263 名前:=260=259 mailto:sage [2009/03/29(日) 14:42:35 ] >>261 ありがとう。初めて使ってみて今3日目。感動を禁じ得ない。
264 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 14:54:09 ] >>262 間違ってるかもしれないが、デフォルト定義パーサ(の一部?)には、 セマンティックアクションを組み込めなかったかも? いったん別なルールに入れれば良かったんじゃなかったっけ? rule a,b; a = digit_p; b = ch_p; expr = +a[&fnc] >> *b[&fnc] 〜 みたいに。
265 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 14:55:22 ] >>264 やってみる!
266 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 14:55:42 ] あるいはこうだったかも a = digit_p[&fnc]; b = ch_p[&fnc];
267 名前:262 mailto:sage [2009/03/29(日) 15:05:31 ] boost::spirit::rule<scannerT> expr, num_p, exclamation_mark_p; num_p=boost::spirit::digit_p; exclamation_mark_p=boost::spirit::ch_p('!'); expr = ( +num_p[&the_func] >> *( exclamation_mark_p[&the_func] ) ) ; これで出来た!動作も今のところ大丈夫っぽい。 ありがとう。 ちなみに a = digit_p[&fnc]; b = ch_p[&fnc]; は死にました。 やっぱりおっしゃるとおり、プリミティブパーサには直接セマンティックアクションを入れられない場合があるみたい。
268 名前:262 mailto:sage [2009/03/29(日) 15:08:45 ] ただし int_p[&PUSH] とかやる時は直接プリミティブパーサにセマンティックアクションを付けてもおkなのか。 むむぅ。 初めて知った。
269 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 15:09:18 ] アクション関数のシグネチャが違うんじゃないの。
270 名前:268 mailto:sage [2009/03/29(日) 16:55:52 ] >>269 ぽいね。 int1つを受け取るセマンティックアクション用の関数とint_pならおkなのか。 どうも。
271 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 16:11:05 ] 文字列の前後の空白を除去する関数が欲しくてBoost.Xpressiveを使って自作しようと思った。 ところがよく見ると<boost/algorithm/string>にtrimという目当ての関数(?)があるようで、 それを使おうかなとも思っている。 でも<boost/algorithm/string>をインクルードするとそれ全体の分で結構バイナリってでかくなっちゃう? それともtrimしか使わないならtrimに相当する分だけがバイナリになって 他の<boost/algorithm/string>の部分は付いてこない? Boost.Xpressiveは別の用件で使っているから抵抗ないんだが、 <boost/algorithm/string>はこのtrim以外で使う予定がないもんだから、 ちょっと心配なんだけど、教えてくださいませんか?
272 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 16:12:54 ] マップファイル出力付きでコンパイルして確認してみればよいじゃまいか
273 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 16:28:54 ] 悩まず即自作してたら、30分で解決したんじゃないか?w
274 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 16:35:53 ] じゃ<boost/algorithm/string/trim.hpp>
275 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 16:53:41 ] みんなありがとう。 やってみる。
276 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 22:43:22 ] boost/algorithm/string/trim.hpp だけincludeすれば、少しはマシかも
277 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 15:08:33 ] >>276 >>274
278 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 19:33:45 ] Boost.Spiritを使った適当なプログラムを書いてみた。 そのプログラムは #include <boost/spirit/core.hpp> となっているのだが、これをより広く #include <boost/spirit.hpp> にしたプログラムを作ってみると、 (他は全く変更していないのに)ファイルサイズが違うのだが、なんで? 環境は Windows XP, g++でコンパイルオプションは-O2 なんだが、実際に使われていない関数やクラスもリンクされてバイナリになっているってこと?
279 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 20:43:32 ] グローバル変数の初期化関連じゃないか。
280 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 01:21:35 ] 更新しました。 今週の更新の大半はドキュメントとGraphのアップデートでした。 ttp://booster.x0.to/ 以下更新内容の一部 [Flyweight] made Boost.Interprocess names shorter to accommodate some filesystems [Type_traits] Add missing #includes. [Graph] Renamed some functions to work better on some compilers First batch of merges from Parallel BGL Merged more changes from Parallel BGL [Spirit] Fixes to exception messages. Fixes to some exception messages. [Numeric] storage.hpp: fix #2891, now check new size instead of old one [Proto] fix proto::lazy
281 名前:278 mailto:sage [2009/04/04(土) 11:12:22 ] >>279 あーなるほど。
282 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 11:15:31 ] >>280 利用させてもらっています いつも乙です
283 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 11:42:04 ] >>280 お疲れ様です。
284 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 12:46:44 ] Boost.Spiritの構文木作成について学べるサイトがあったら教えてください。 日本語がいいです。
285 名前:284 mailto:sage [2009/04/04(土) 12:51:11 ] ちなみに俺がググったところ パースツリーを作る homepage3.nifty.com/kaku-chan/boost/spirit/chapter_005.html がヒットしているんですが、もしみなさんのオススメがあれば是非知りたいです。
286 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 17:00:21 ] Windows XP SP2, MinGW(g++ 3.4.5)をインストールして使っています。 コマンドプロンプトで g++ something.cpp -I "C:\BoostC++Libraries" として使っていますが、毎回インクルードパスを入力するのが面倒で、 環境変数で省略出来るのではないかと思い調べてみました。 その結果、 CPLUS_INCLUDE_PATHにboostのパス(私の場合C:\BoostC++Libraries) を設定すれば大丈夫という記述を見つけたのですが、 実際に設定してみてもうまくいきません。 (インクルードパスを省略してg++ something.cppだけでコンパイルできません。) 近い環境の方で、出来ている方はいらっしゃいませんか?
287 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 17:04:10 ] つ[makefile]
288 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 17:07:27 ] 自分もその環境変数でうまくいかなかったから、.bashrcで alias g++='g++ -I /cygrive/.../boost_1_38_0' のようにしている。お察しの通り、Cygwinだけど。
289 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 17:16:54 ] 俺は>>286 と同じ環境で、コマンドプロンプトでCPLUS_INCLUDE_PATHを設定すると ちゃんと読みに行ってくれるよ。 まあ、普段はmsys使ってるけど。
290 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 17:20:09 ] >>287-289 みんなありがとう。 やっぱみなさん色々やってんのね。
291 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 17:25:51 ] 結果、GUIでなく、 >>289 さん方式(コマンドプロンプトからCPLUS_INCLUDE_PATHを設定) でインクルードパスの指定が不要になりました。 愛してる。
292 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 18:37:11 ] たぶんね、マイコンプータのプロパテから環境変数を設定したあと再起動してなかったでしょ
293 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 19:05:13 ] >>292 それもしてなかったです。 設定→ダメじゃん→設定を削除して元に戻す しかしてなかったです。 それも試してみます。
294 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 19:58:48 ] 大元の環境変数は再起動しないと反映されないよ Windowsはね
295 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 20:03:06 ] >>294 Linuxなら再起動しなくても反映されますか?
296 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 20:14:28 ] 環境変数を設定したシェルから起動したシェルでは大丈夫。
297 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 20:48:55 ] 環境変数で悩める286が羨ましいぜ 二日掛りでmingw + bjamの罠から未だ抜け出せない。
298 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 20:55:33 ] bjamってmingwには未対応ってことになってるよね、確か。 俺はcmd.exeからbjamを使ってコンパイルして、使うときはmsysからmingwを使ってる。 これで Program Options と Thread を使ってるが、一応うまく動いてるぞ。
299 名前:デフォルトの名無しさん [2009/04/06(月) 15:19:32 ] 俺もmingwだけど、includeファイルは標準のところにぶち込んだ
300 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 13:48:14 ] 何かWikiに「gzipはGPL」って書いてるんだが、これは ・RFC1952で記述されてるアルゴリズムを元に作ったgzipという圧縮ツールがGPL ・boostに含まれているgzipライブラリはboostライセンス って事だよな?
301 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 13:59:08 ] どこのWikiの話だよ
302 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 14:03:15 ] >>301 すまん、以下のところ。 ja.wikipedia.org/wiki/Gzip
303 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 17:55:46 ] boostが使ってるのはgzipじゃなくてzlibだろ
304 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 19:30:15 ] boostのshared_ptrを使ってると 再帰関数内ですぐにスタックオーバーフローになる。
305 名前:インドリ [2009/04/09(木) 10:05:55 ] blogs.wankuma.com/episteme/archive/2009/04/08/171040.aspx d.hatena.ne.jp/faith_and_brave/20090408
306 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 12:13:53 ] 不買活動?
307 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 13:48:24 ] > 税込2,940円 高い!
308 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 21:14:12 ] >>304 shared_ptrって8バイトしかないんだし、別の問題じゃね?
309 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 21:38:38 ] >>305 欲しい
310 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 21:59:59 ] >>305 欲しくない
311 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 22:17:12 ] 欲しいとか欲しくないじゃない。うざいから買いたくない。 本屋で平積みしてたら、上に萌々linux載せてあげてもいい。
312 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 22:25:32 ] 内容がまともなら、日本語でC++の本が増えて喜ばしいことだと思う。
313 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 22:51:32 ] >>305 のインドリってヤツ、 > ・投稿者は、話題と無関係な広告の投稿に関して、相応の費用を支払うことを承諾します 広告費払ったのかな? おまけにマルチ野郎か。 pc12.2ch.net/test/read.cgi/tech/1231640498/
314 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 22:51:57 ] >>308 デストラクタが再帰的に呼び出されることじゃねーの
315 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 00:47:52 ] functionを配列にして、それにlambdaを入れて使っています。 第1引数に構造体へのポインタを取って、そのメンバを書き換えているのですが 加算代入をやると変な値になってしまいます。 回避方法はもう分かったのですが、値が壊れてしまう原因が知りたいです。 ttp://bucyou.mydns.jp/up_source2/codeview.php?fn=3 コンパイラはVC2008Express、boostのバージョンは1.38です。
316 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 11:25:38 ] > ( (_1->*_x) += 0.5), も ( (_1->*_x) += constant(0.5)) ってすればいいんでは?
317 名前:316 mailto:sage [2009/04/10(金) 11:31:06 ] 同じ環境動作確認済み 出力結果 1, 1 10, 1 10, 20 10.5, 20 10.5, 20.5
318 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 14:44:28 ] それが > 回避方法はもう分かったのですが ってことだと思う。なんで0.5の場合はconstantつけないとおかしくなるの?って質問では。
319 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 16:11:25 ] 0.5がラムダ式として扱われず、すぐに評価されてしまうから constantを付けることで、ラムダ式にして評価を遅延させる。 constantを付けないと(_1->*_x)なラムダ式に0.5を加算して おかしなことになる。
320 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 17:51:10 ] 更新しました。今週はビルドシステムとドキュメントとGraphを中心にかなり大量の更新が為されています。 ttp://booster.x0.to/ 以下更新内容の一部 [Graph] Merged headers and source files (but not examples, tests, or docs) from Parallel BGL [Spirit] New lexer guts struct: note detail namespace! [Wave] Use data() accessor on state_machine. [Mpl] add mpl::char_ and mpl::string, fixes #2905 [Program_options] Merge from release: [Detail] Avoid an unnecessary copy in 'operator[]' [Exeption] added functions: current_exception_diagnostic_information, current_exception_cast [Graph,Mpi,Pending,Property_map,Python,Signals] Moved property map library into property_map/ directory; made old files into stubs with #warnings; converted uses and docs of property map library to use new names [Flyweight] fixed a thread safety bug in refcounted [Math] signbit can return either zero or not, rather than true/false. [Format] Fixed unused parameter - bug #2455 [Config] As of STLport 5.2, unordered_set and unordered_map have been moved from the std:: namespace to the std::tr1:: namespace [Asio] Prevent locales from affecting the formatting of endpoints. Fixes #2682.
321 名前:315 mailto:sage [2009/04/10(金) 20:58:38 ] >>319 ありがとうございます。 警告レベルを/W3から/W4へ引き上げたら、「代入演算子が生成できない」という警告が出ました。 警告の内容はよく分からないんですが、やっぱり型がおかしかったみたいです。 // Release設定でコンパイルしたら何故か正常に計算されて笑いましたけど。
322 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 21:22:27 ] >>321 ReleaseとDebugどちらか片方でのみ正常に動作する場合、 参照先が「初期化されていない」か「既に解体されている」ことが多い。 315は「+=」で生成されるオブジェクトが0.5をconst参照で保持しているのが問題。 0.5は一時変数なので、funcの初期化が完了した時点で解体される。 「=」が正常に動作するのは、10.0をコピーして保持しているため。 constant(0.5)も同様。
323 名前:デフォルトの名無しさん [2009/04/12(日) 16:25:57 ] typedef boost::mpl::vector<int, char, std::string> vector; typedef boost::mpl::if_c<boost::is_pod<boost::mpl::_1>::type::value, boost::add_pointer<boost::mpl::_1>::type, boost::mpl::_1, > operate; typedef boost::mpl::transform<vector, operate>::type result; mpl::transform の Op に mpl::if_c は使えないの?
324 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 19:59:48 ] そもそも使い方がめちゃくちゃなんだが何がしたいんだ。
325 名前:デフォルトの名無しさん [2009/04/12(日) 20:22:51 ] typedef boost::mpl::vector<int, char, std::string> vector; typedef boost::mpl::if_<boost::is_pod<boost::mpl::_>, boost::add_pointer<boost::mpl::_> ,boost::mpl::_> operate; typedef boost::mpl::transform<vector, operate>::type result; を、if_cに書き換えたんだけど・・・ typedef boost::mpl::vector<int, char, std::string> vector; typedef boost::mpl::if_c<boost::is_pod<boost::mpl::_>::type::value, boost::add_pointer<boost::mpl::_>::type, boost::mpl::_> operate; typedef boost::mpl::transform<vector, operate>::type result; typedef boost::mpl::transform・・・の行をコメントアウトすればコンパイルは通る。 めちゃくちゃってどこが?
326 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 20:53:39 ] using namespace boost::mpl::placeholders ; typedef boost::mpl::if_< boost::is_pod< _1 >, boost::add_pointer< _1 >, _1 > operate ; これで通るはず。 そもそもな、lambda expressionは、その時に評価してもしょうがないだろ。 add_pointer<_1>::type とした時点で、メタ関数は評価されているんだ。 transformの中で評価させたいんだから、早漏はコンパイラに嫌われるぞ。 >>325 そりゃ当たり前だ。transformに通さなきゃコンパイルは通るだろ。 こんどはunaryですらなくなってるぞ。
327 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 20:56:32 ] struct print_type { template < typename T > void operator () (T) const { std::cout << typeid(T).name() << std::endl ; } } ; int main() { using namespace boost::mpl::placeholders ; typedef boost::mpl::vector< int, char, std::string > vector; typedef boost::mpl::if_< boost::is_pod< _1 >, boost::add_pointer< _1 >, _1 > operate ; typedef boost::mpl::transform< vector, operate >::type result ; boost::mpl::for_each< result >( print_type() ) ; } 動いてるみたいだな。
328 名前:325 [2009/04/12(日) 21:11:53 ] >>326 >typedef boost::mpl::if_< boost::is_pod< _1 >, boost::add_pointer< _1 >, _1 > operate ; なら期待した動作することは確認済みです。 if_c でやりたい。
329 名前:325 [2009/04/12(日) 21:12:37 ] >>327 >>328
330 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 21:19:32 ] それは無理というものだ。 なぜなら、if_cは、メタ関数ではなく、boolを要求するんだから。 lambda expressionにしようがない。すぐに評価されては困るんだよ。 boost::is_pod< _1 >::type:value と、ネストされた型や定数を見た時点で、すでにinstantiateされる、つまり評価されているんだ。
331 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 15:21:46 ] javaの拡張scalaの上をいくものはできないものかなあ
332 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 16:57:44 ] >>331 Scalaのどの機能が欲しいの?おせーてプリーズ。
333 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 17:57:49 ] boost::unit_test_frameworkについて質問です。 今、std::wstring ToWide(std::string& rhs) という関数があり この関数をテストするために std::wstring ans = L"テスト"; std::string str = "テスト"; BOOST_CHECK_EQUAL( ToWide(str), ans ); というケースを書きましたが、コンパイルエラーになってしまいます。 BOOST_CHECK( ToWide(str) == ans ); とは書けましたのでwchar_tが出力されるときはこっちにすればいいのですが wstringを出力できるようにするにはどうすればいいのでしょうか。 最近boostを使い始めたので変なこといってたらごめんなさい。
334 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 18:53:18 ] boost.lambdaから関数オブジェクト作ろうとすると とんでもないタイプ量必要なのなんとかなんないの
335 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 18:54:32 ] C++03の限界です。あきらめてください。
336 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 22:17:38 ] 更新しました。今週もドキュメントとビルドシステムの整備が多いです。 亦、boost_pythonのビルドをPython2.6.2ベースに移行しました。 ttp://booster.x0.to/ 以下更新内容の一部 [Graph] Merged in changes from Nick to distributed betweenness centrality Merged in code and docs from Parallel BGL; CMake-based build system for tests and examples and docs is not working; src and doc can be built with bjam [Mpl] mpl::string is a bidirectional sequence, not random access; c_str is a separate metafunction, not a class static fix off-by-1 errors add and document BOOST_MPL_LIMIT_STRING_SIZE and mpl/limits/string.hpp saving some additional template instantiations [Math] Add more instrumentation code, along with some AMD64/Linux fixes. [Exeption] fixing an error that caused warnings in diagnostic_information.hpp [Signals2] signals2/signal.hpp does not need to include signals2/shared_connection_block.hpp. Fixed compile errors in c++0x mode. [Interprocess] Modified examples so that they can be run in parallel. [Unordered] Add stream output to the count test helper for unordered. [Filesystem] Fix #2948 - Path typedef moved to namespace boost::filesystem Fix incompatibility between asio and ncurses.h due to the latter defining a macro called "timeout". Fixes #2156. [Program_options] Sync trunk&release branches
337 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 22:41:50 ] >>336 乙!
338 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 15:35:43 ] 配列の要素数を変更する予定がなく、 しかしコンテナとしての扱いをしたい。 こんな場合にはboost::arrayがあるらしいですが、 これはstd::vectorよりも効率(速度やバイナリのサイズなど) が良いのでしょうか? std::vectorは標準ですからboost::arrayよりも 最適化の研究が(VC++やg++など有名どころで)なされているとか そういったことは普通ないですよね?
339 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 15:41:09 ] 以前実測したときはvectorよりは多少効率が良い程度だったよ。 当然ながらarrayでも生配列に比べるとかなり効率悪かった。
340 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 15:46:08 ] 自分の環境で実測するしかないんじゃない
341 名前:338 mailto:sage [2009/04/18(土) 15:55:59 ] >>339 ありがとうございます。 ご教示に従い、コンパイル時に数が決まっている状況では 生配列にすることも考えてみます。 >>340 やっぱそうですよね。 そもそも本当にそれがボトルネックになっているのかから考えないといけませんしね。。。
342 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 17:03:54 ] >>339 最適化したのか? vectorをreserveせずに増やしまくりとかじゃなければ、 配列だろうとarrayだろうと大した差はないと思うけど