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/
2 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 21:28:03 ] >>1 乙
3 名前:デフォルトの名無しさん [2009/01/19(月) 21:31:09 ] 乙 こ、これは>>1 乙じゃなくて>>2 乙なんだからね!
4 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 21:31:40 ] ■関連書籍■ Boost C++をチューンアップする最先端ライブラリ www.amazon.co.jp/exec/obidos/ASIN/4894714191/ Boost C++ Libraryプログラミング www.amazon.co.jp/exec/obidos/ASIN/4798017043/ Beyond The C++ Standard Library www.amazon.co.jp/exec/obidos/ASIN/0321133544/ C++ Template Metaprogramming www.amazon.co.jp/exec/obidos/ASIN/0321227255/ The Boost Graph Library www.amazon.co.jp/exec/obidos/ASIN/0201729148/ ■関連スレ■ C++相談室 part65 pc11.2ch.net/test/read.cgi/tech/1230341243/ C++0x 4 pc11.2ch.net/test/read.cgi/tech/1214407525/ 【C++】STL(Standard Template Library)相談室 11 pc11.2ch.net/test/read.cgi/tech/1231640024/
5 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 21:32:40 ] Loki sourceforge.net/projects/loki-lib/ JTC1/SC22/WG21 - The C++ Standards Committee www.open-std.org/jtc1/sc22/wg21/ POCO, the C++ Portable Components www.appinf.com/poco/info/ sourceforge.net/projects/poco/ The unofficial BCB Boost patches bcbboost.sourceforge.net/
6 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 21:34:00 ] テンプレは以上です. >>4 に ・Boost C++をチューンアップする最先端ライブラリ を加えたのと, ・Boost C++ Libraryプログラミング のリンクを第二版に修正しました.
7 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 01:04:16 ] コンパイラ VC8 boost 1_37_0 次のコードがC2780連発です。 #include <boost/bind.hpp> #include <boost/numeric/interval.hpp> using namespace boost; using namespace boost::numeric; int main() { bind(&in, 3, interval<int>(2, 4)); } 何か対処法などご存知の方いらっしゃるでしょうか? find_ifなどの条件式に使いたいのですが。
8 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 02:08:01 ] >>7 in のテンプレート引数を指定すれば、とりあえずうまくいくと思うけどbind(&in<int, interval<int>::traits_type>, 3, interval<int>(2, 4)); もっと簡単にかけるかどうかはわからんです
9 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 16:07:04 ] // / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ まピョーん☆ / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
10 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 02:09:13 ] OS: Mac OS X 10.5.6 コンパイラ: gcc 4.0.1 boost: 1_37_0 この環境で,filesystemをソースからビルドしてパスを通して, g++ test.cpp -lboost_filesystem-gcc40-mt-1_37 みたいにコンパイルしようとすると,リンカがsymbol not foundとエラーをはきます. ubuntuでは問題ないためmac特有の問題だと思うのですが,原因,対策がお分かりの方いらっしゃいませんか? ちなみに,以下がコンパイル結果です. g++ test.cpp -lboost_filesystem-gcc40-mt-1_37 Undefined symbols: "boost::system::get_generic_category()", referenced from: __static_initialization_and_destruction_0(int, int)in ccCDIN5Z.o (長いので中略) libboost_filesystem-gcc40-mt-1_37.a(operations.o) __static_initialization_and_destruction_0(int, int)in libboost_filesystem-gcc40-mt-1_37.a(operations.o) ld: symbol(s) not found collect2: ld returned 1 exit status
11 名前:10 mailto:sage [2009/01/22(木) 02:20:10 ] ソースコードは以下の通りです. #include <boost/filesystem.hpp> using namespace boost; int main(int argc, char** argv) { filesystem::path dir("test"); filesystem::create_directory(dir); return 0; }
12 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 07:21:21 ] >>8 コンパイルできました。 ありがとう。
13 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 09:19:21 ] >>10 -lboost_system-mt
14 名前:10 mailto:sage [2009/01/22(木) 16:35:26 ] >>13 無事コンパイルできました. 冷静に考えてみると,エラーを見たらboost::systemを参照してたんですね... それにしてもなんでmacだけ挙動が違うんだろうか. とにかくありがとうございました!!
15 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 17:21:16 ] ubuntuに入ってるのが1.34.1以前なんじゃね
16 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 18:33:46 ] 更新しました。 ttp://booster.x0.to/
17 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 21:08:29 ] いったい何人が落としてるのか知らんが RSS配信でもしてテンプレにURL貼るとかすりゃいいのに 毎度毎度スパムのように貼るな と言ったら荒れるのだろうか
18 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 08:17:34 ] >>17 そうカリカリすんな。お前は本物のスパムにもマジレスするのか? 目障りだと感じたなら黙ってあぼーんするだろ?
19 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 12:04:12 ] もうすぐ1.38ですね。 何が変わったのか楽しみ
20 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 15:45:15 ] 0xまでC++はおあずけ
21 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 11:03:31 ] 0xいらね
22 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 23:18:01 ] マイクロ秒の値をミリ秒に変換するのにboost::unitsを使うのは重すぎ? 1000で割るだけのことなんだけど、1000倍する人がいたりするので、 こういう仕組みを導入する必要もあるかもしれないと思って勉強してるんだが、 思ったより複雑でちょっと挫折しかけてる。
23 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 10:54:49 ] >1000で割るだけのことなんだけど、1000倍する人がいたりするので、 >こういう仕組みを導入する必要もあるかもしれないと思って勉強してるんだが、 そういう仕組みを導入するより、1000倍して尚且つテストもしてみない阿呆を切るべき。
24 名前:デフォルトの名無しさん [2009/01/26(月) 11:30:44 ] boost::functionより速いらしい・・・ www.codeproject.com/KB/cpp/fastdelegate2.aspx
25 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 18:14:43 ] >>24 実装は面白いけれどさ。 正直言って速度差は微々たる物だなぁ。 呼び出しにかかる時間は、現実的に問題にならない。 実際のコードでは、桁が何桁も違うくらい遅い処理を、その呼び出された関数の中でするはず。 すると一千万回呼んで500〜1000msぐらいの速度差なんてどうでも良くなってしまう。 劇的に違うのはコピーにかかる時間で、 これはBoost.Functionの実装ではヒープを使っているために目に見える速度差がでるんだろうけど。 一千万回コピーして十秒足らず。 そんなにコピーする?
26 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 18:33:18 ] それよりコンパイルが早いのがほしいわ
27 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 22:13:44 ] >>26 激しく同意
28 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 22:15:05 ] 公共の仕事に配属された。 boost禁止だと・・・orz
29 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 22:23:06 ] コンパイル早くするのはマシン変えるのがいいんじゃね。
30 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 23:13:36 ] そりゃ、下手すりゃ数十年単位で保守を続けるプログラムに変化の激しいboostは論外だろ。 大人しくC++0xの正式リリースを待て。
31 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 23:47:25 ] boostのソースもってきて独自実装に入れちゃえよ。
32 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 00:00:44 ] boostのソースコードを使うことにはライセンス的にまったく問題ないわけだから、 お前の書いたコードして使うってのはだめなの?
33 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 00:43:46 ] そのBoostのコードだれかメンテできんのか? あ,本家のコードに追随して更新していけばいいか…
34 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 08:46:32 ] >>33 俺は自分がメンテできるとこだけ移植してるな その過程でソースを詳しく見ることになるので いろいろと勉強になることも多い
35 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 10:45:02 ] >>33 別に更新し続けなければいけない理由はないだろ。 もし、自分が「更新されたboostに追加された機能」を使いたいなら必要だけど。
36 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 17:11:35 ] boost.intrusive.listでアロケータを設定したいのですが設定できませんか? std::allocatorや自作のアロケーターをテンプレートレベルで混在させたいですぅ。
37 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 17:30:30 ] すみません自己解決しました。
38 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 13:21:57 ] 1.38のリリース準備が完了したみたいですね。
39 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 00:06:48 ] New Libraries: Flyweight, ScopeExit, Swap. Updated Libraries: Accumulators, Exception, Hash, Multi-index Containers, Proto, Unordered, Xpressive ttp://beta.boost.org/users/news/version_1_38_0
40 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 00:54:31 ] >ScopeExit もう自前でscope_guard書く必要がなくなるんだろうか
41 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 12:04:22 ] boost::hoge を文章の中で言うときは boost.hoge って書くことになってるの?
42 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 12:43:31 ] >>41 いいえ
43 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 21:52:32 ] 更新しました。 ttp://booster.x0.to/ 迷惑という意見が多い様でしたらサイトを閉じます。
44 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 22:16:05 ] >>43 稀によく落とすからなくなると寂しい。 とは言え更新箇所わからないし最新版欲しかったら自分からチェック入れるからな。
45 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 01:29:45 ] >>43 気にせず続けてくれ
46 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 02:04:04 ] 更新の通知の仕方に文句を付けられただけなのに、いきなりサイト閉鎖とは気が早いな。
47 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 07:21:27 ] あれ!? >>43 のサイトまじで消えてる!!
48 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 09:18:59 ] 今日は1.38のリリース日だー(・∀・)
49 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 10:40:19 ] >>47 あるよ。リロードしてごらん boostの発展のためには、ライブラリを簡単に使えるよに支援してくれるサイトの存在は良いことだと思うよ。
50 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 22:45:18 ] もうすぐ1.38 wkwkbnbn
51 名前:デフォルトの名無しさん [2009/02/01(日) 20:12:06 ] >>43 サイトを閉じることで更新の報告がなくなるのなら、ぜひお願いします。
52 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 20:37:30 ] スレの保守を兼ねていて悪くないとは思うんだけどな。
53 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 20:48:11 ] 更新報告でスレが埋まる訳でも無し >>51 は個人的に恨みでもあるのか
54 名前:デフォルトの名無しさん [2009/02/01(日) 21:28:51 ] >51 むしろお前がなくなればいい
55 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 22:21:23 ] >>43 様の報告レスがあれば保守ageをしなくて済むというメリットが
56 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 22:46:27 ] では次回から、SVNのコメントから重要そうなものを幾つか抜粋して 書き込み時に添える様に致します。
57 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 13:48:03 ] あー、それなら更新点報告ということで役にも立つな。
58 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 17:32:05 ] 便利なサイトだった コメントつけたことはなかった
59 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 10:03:03 ] 1.38がまでリリースされてない件について!!
60 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 10:34:25 ] beta2出たのが1/30だぜ?
61 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 13:46:37 ] C++0xが出た後のboostはどうなるんだろうね。 0x拡張分の6割だか7割だかはboost発祥だそうだし、 0xとの重複分を廃止した上で新たなクラスを追加構築していくのかな?
62 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 16:54:35 ] いやいや、非対応の古い処理系向けに残ってくれないと困る。 今だってTR1が出た後にunorderedとかhashとか追加しているくらいだ。
63 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 17:50:53 ] C++0xが広く普及するまではlambdaにはboost版はやっぱり必要だもんな。 0xの普及が遅いとboost版から抜けられなくなるかも
64 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 18:08:47 ] すみません、#ifdefでboostが使えるかどうかの判定ってできますか?
65 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 18:32:57 ] >>64 ヘッダーが読み込まれていれば頭で何らかのシンボル定義してるだろうから、それで確認?
66 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 18:37:09 ] >>65 ありがとうございます。やってみます。
67 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 21:07:35 ] ヘッダーの読み込みが余所で行われている前提ならともかく自分で #include するなら boost 使えない時にエラーになっちゃうし。 普通そーいうのは configure とかでやる。
68 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 11:40:39 ] boostの正規表現ライブラリって日本語対応してないんだな。 ショック
69 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 12:29:26 ] wide char版なら使えるんでは?
70 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 17:22:40 ] >>68 boost::wregex boost::u32regex 好きなほう使え mingwでicuのstatic作るのにmakefileかなり修正させられた。
71 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 18:23:49 ] boost::regexよりもboost::xpressive(非静的記述でも)のほうが速いって認識であってる?
72 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 19:53:36 ] UTFにすることで日本語も問題なく使えるんじゃなかったっけ?
73 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 04:48:31 ] 更新しました。 ttp://booster.x0.to/ 今回から、前回のビルドからの変更点を記載したchangelog.txtを同梱する様に致しました。 以下その一部 Fix bug in bessel_jn for n == -1. Add new test case. Modified : /trunk/boost/math/special_functions/detail/bessel_jn.hpp Modified : /trunk/libs/math/test/test_bessel_j.cpp Added missing config.hpp include for the wide characters support configuration macro. Modified : /trunk/libs/date_time/test/testfrmwk.hpp Changed to two_bit_color_map by default Modified : /trunk/boost/graph/dijkstra_shortest_paths.hpp Default color map to white, and fixed some warnings Modified : /trunk/boost/graph/two_bit_color_map.hpp Add missing #include <iostream>. Modified : /trunk/libs/asio/example/buffers/reference_counted.cpp Modified : /trunk/libs/asio/example/chat/posix_chat_client.cpp Modified : /trunk/libs/asio/example/nonblocking/third_party_lib.cpp Make validation a static member function. Fixes #2673 Modified : /trunk/boost/random/inversive_congruential.hpp Modified : /trunk/boost/random/linear_feedback_shift.hpp added missing std:: Modified : /trunk/boost/flyweight/intermodule_holder.hpp Use a pipe if eventfd is not supported at runtime. Fixes #2683. Modified : /trunk/boost/asio/detail/eventfd_select_interrupter.hpp Ensure arguments to windows::overlapped_ptr::complete() are passed through to the completion handler. Fixes #2614. Modified : /trunk/boost/asio/detail/win_iocp_overlapped_ptr.hpp fix wrong include Modified : /trunk/boost/fusion/include/remove.hpp
74 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 05:47:16 ] >>71 長い条件以外では大体そんな感じだと思ってる ttp://www.boost.org/doc/libs/1_37_0/doc/html/xpressive/appendices.html
75 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 11:13:26 ] >73 毎回そのまま張るとまた論議を呼びそうな気が。 張るんなら↓みたいにまとめた方が見やすいんじゃないだろうか。機械的処理も可能だし。 各ファイルの Added とかは要らないのでは、と思って抜いてみたんだけど Graph とかは厳しいな。 [Math] - Fix bug in bessel_jn for n == -1. - Add new test case. [DateTime] - Added missing config.hpp include for the wide characters support configuration macro. [Graph] - Changed to two_bit_color_map by default - Default color map to white, and fixed some warnings [Asio] - Add missing #include <iostream>. - Use a pipe if eventfd is not supported at runtime. Fixes #2683. - Ensure arguments to windows::overlapped_ptr::complete() are passed through to the completion handler. Fixes #2614. [Random] - Make validation a static member function. Fixes #2673 [Flyweight] - added missing std:: [Fusion] - fix wrong include
76 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 11:26:23 ] 現在何がアクティブなのかがわかって便利だね
77 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 15:03:26 ] >>74 thx たいていの場合で2倍以上速いんですね
78 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 00:18:47 ] Boost.Regexオブジェクト構築に毎回コストがかさむのですが、 すべてクラスの変数にするとかしかないのかな。 いっぱい関数有るんでめんどくさいわ・・・
79 名前:78 mailto:sage [2009/02/08(日) 00:36:08 ] 変更が少なくていいので、 とりあえずstatic変数にすることにしました。
80 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 19:50:24 ] 1.38.0きてるお
81 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 22:14:02 ] spiritのast_treeの質問なんですが、 //型名など一部省略してます spirit::rule intp, expp; intp = leaf_node_d[int_p]; expp = int_p >> *(root_node_d[ch_p(L'+')] >> int_p); 上記のようなルールで、スキップパーサにblank_pを指定して 1 + 2 を構文解析させたとき、スキップ指定しているにもかかわらず、 2つ目の値のツリーの結果に、+から2までの間のスペースが' ''2'といった 感じに含まれてしまうのですが、leaf_node_dはそういう仕様なんでしょうか? (1つ目の値はスペースは含まれていない) リーフノードにスペースを含まないようにするには、スキップパーサを指定してても intp = no_node_d[*blank_p] >> leaf_node_d[int_p]; の様に、ルール側でもスペースを飛ばすしか方法がないのでしょうか?
82 名前:81 mailto:sage [2009/02/09(月) 22:51:59 ] 訂正 expp = intp >> *(root_node_d[ch_p(L'+')] >> intp);
83 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 18:41:55 ] 更新しました。SVNは1.39に移行しました。 ttp://booster.x0.to/ 以下更新内容の一部 [Units] Zeroing in on bug with sun < 5.9 Begin tracing xlc failure [Graph] Integrating SOC 2007 code Importing all_cliques, all_cycles algorithms Importing geodesic distance module from SOC. Imported clustering coefficient, eccentricity and core numbers algorithms. [Regex] Fixes #2713: change table initialisation so that it's initialised statically. Workarounds to allow compilation by Sun studio without the -library=stlport4 option. [Random] correctly detect the end of the range in lagged_fibonacci_01::seed. Fixes #2703 Split random_test.cpp into multiple files to avoid hitting resource limits. Correct stringizing [Spirit] Bug fix to iterator 亦、2月8日付で1.38の正式版もリリースされました。 ttp://www.boost.org/users/news/version_1_38_0 >>75 有難うございます、改善致しました。
84 名前:デフォルトの名無しさん [2009/02/13(金) 18:54:59 ] ttp://booster.x0.to/ を利用してる奴どれくらいいるの? 手あげて
85 名前:デフォルトの名無しさん [2009/02/13(金) 19:11:38 ] 利用してます bccのバリなりもほしいです
86 名前:デフォルトの名無しさん [2009/02/13(金) 19:13:19 ] 自鯖なら、ダウンロード数、アクセス数は把握してるんでは?
87 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 19:35:58 ] age厨は自演で何をしたいんだ? 前スレから延々つきまとってるだろお前。
88 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 23:41:16 ] >81 の質問はスルーですか? 他所のastのサンプルでほぼ同じようなコード書かれてるけど、 スキップ文字が入るなんて説明ないし自分のミスっぽい気はするんですが。
89 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 10:26:38 ] 少なくても最近ここに訪れている人の中には回答できる人はいないと思う。
90 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 10:40:56 ] つかえねー
91 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 11:23:14 ] >>88 > >>81 の質問はスルーですか? お前が答えてやれよ。
92 名前:デフォルトの名無しさん [2009/02/14(土) 12:57:25 ] >>81 blank_p ではなく space_p tamachan.club.kyutech.ac.jp/~gridbug/spirit/spirit01.html
93 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 13:02:52 ] >>92 やっぱ、違うっぽいorz
94 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 15:14:53 ] >>81 intpいらない。int_pは元々単一ノードとして解析される。 expp = int_p >> *(root_node_d[ch_p(L'+')] >> int_p); 多分、leaf_node_dがint_pの前にスキップされた空白をノードに取り込んでるんだろう。
95 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 16:04:06 ] >>94 int_pのみだと空白スキップされることはまでは試して 気がついてたのですが、int以外の自作トークンが使いたいときに どうすれば良いのかで悩んでます。 やはりno_node_dで空白飛ばすのが正答なんでしょうかね。
96 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 17:43:19 ] >>95 バグかも知れんね。 spirit/tree/common.hppの907行あたりを書き換えたら予想通りの結果になったよ。 if (hit) { std::advance(from, std::distance(from, scanner.first) - hit.length()); return result_t(hit.length(), factory_t::create_node(from, scanner.first, true)); }
97 名前:統合しました。。。: mailto:sage [2009/02/14(土) 18:08:11 ] pc11.2ch.net/test/read.cgi/tech/1234420483/ 真・スレッドリスターター。。。( ̄ー ̄)ニヤリッ
98 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 18:08:15 ] >>96 なるほど、そうでしたか。 チュートリアルなどでもこの不具合の発生するコードがあるのに 今まで誰も問題にしなかったみたいだし、割と最近の修正で 混入したバグなんでしょうね。 わざわざ調べていただいて、ありがとうございました。
99 名前:89 mailto:sage [2009/02/14(土) 22:21:42 ] >>96 正直侮りすぎた。スマンかった。
100 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 04:17:45 ] 謝らなくていい。ただ邪魔だから消えろ。
101 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 13:09:53 ] それよりその不具合についてコミットしといたほうがいいんでは
102 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 14:41:28 ] boostは読めるけど英語は読めません
103 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 18:17:28 ] >>102 辞書引け
104 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 20:49:17 ] タイトルをast_tree value bug ? とでもして、 症状の出る最小のコード書いて、tree.value の結果書いて // bug ? とでも書いとけば多分汲み取ってくれるだろう。 該当フォーラムのアドが分からんので自分はコミットできませんけど。
105 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 21:11:19 ] this sentence is written in japanese. あとはローマ字で適当に書いておけ。
106 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 22:34:08 ] スマートポインタを昨日から触り始めました。 これはokなのに、 boost::scoped_ptr<string> s( new string("foo") ); これはコンパイル出来ない仕組みなのはなぜ? boost::scoped_ptr<string> s; s = new string("foo"); たとえばコンストラクタの中でinit関数を呼んで その中でポインタ初期化したい場合とかどうすればいいんだ
107 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 22:40:20 ] s.reset(new string("foo"));
108 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 22:40:21 ] >>106 s.reset(new string("foo"));
109 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 23:18:39 ] >>106 ひとつのポインタを別々のshared_ptrに代入してはいけないのでポインタを=で代入できないようにしている。newしたらすぐにスマートポインタにセットさせるのが基本。 スマートポインタをスマートポインタに=を使って代入は可能のでこれを使って共有する。
110 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 00:07:42 ] shared_ptrだと boost::scoped_ptr<string> x; boost::scoped_ptr<string> y( new string("foo") ); x = y; scoped_ptrだと x.reset(new string("foo")); と理解しました。 init関数でresetって違和感ありますが、こういうものなのでしょうか。 scoped_ptrを初期化子リストでnewしない場合は 設計を見直した方がいいのかな
111 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 01:03:57 ] 見直した方がいいかもね。結果は変わらないかもしれんが。
112 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 01:12:04 ] shared_ptrでもresetできるよ、一応念のため。
113 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 03:44:59 ] >>110 コンストラクタから例外投げないとか言うアホなコーディング規約に縛られてるんでもなければ 初期化リストで new しとけ。
114 名前:113 mailto:sage [2009/02/17(火) 03:46:52 ] あれ?ごめん。 init() はコンストラクタの中で呼ぶのね。 そうなると初期化リストで new しない理由がわからん。以下 >111 と同文。
115 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 08:31:26 ] boostのshared_ptrの資料に、無名オブジェクトを使った以下のコードはfunc2が例外を投げるとリークの可能性があると書いてたけどどう? func(shared_ptr<Hoge>(new Hoge(),func2( )) newしてfunc2が評価されて例外投げるとshared_ptrにセットされる前の可能性があるかららしいけど、この評価順は規格上未定義だからって普通にあるの?それとも規格上ありうるってこと?
116 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 10:23:47 ] >>115 Effective C++にも 「やるな」 って書いてなかったっけ?
117 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 11:04:26 ] >>115 経験談だけど引数の評価順はかなり簡単に変わるから普通にある 評価順に依存してバグが起こるコードだとマジヤバイ 当然コンパイラ次第なのだけど,デバッグ用の最適化なし,と,最適化あり,にするだけで変わったりする デバッグで問題見つからなくて泣きそうになったことある
118 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 00:53:23 ] そんなクソコードはマクロでも使わなきゃでてこないんじゃね?
119 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 03:38:54 ] スマートポインタどうこうは別にして 評価順によるバグなんて本能的に避けるだろ。 たまに、新米プログラマで、変数使わないで長い式をグダグダ一気に書くのが かっこいいと思ってる奴がいるから困る
120 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 19:09:25 ] ,を越えて評価順が混ざるとは思わなかった。
121 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 19:56:50 ] >>120 115の例に表れるカンマは関数呼び出しの一部だよ。 順次演算子としてのカンマなら、たしかに評価順序点になるけど。
122 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 21:44:14 ] 更新しました。 ttp://booster.x0.to/ 以下更新内容の一部 [Units] Get rid of duplication between conversion_helper and conversion_factor_helper. [Graph] Updating core_numbers from David Gleich. Importing examples from SOC 2007 [Random] Change shfit2 to shift2. Add missing namespace scope definitions of shift1 and shift2. Fixes #2764 Convert uniform_01 to the current distribution interface, dispatching on the first template paramter to retain backwards compatibility. Fixes #599. Fixes #1544. Fixes #2679 [Ptr_container] fixed bug in ptr_sequence_adapter.hpp, plus removed some warnings in detail/reversible_ptr_container.hpp. added new overload of new_clone() that allows for null-values. removed nasty bug in erase() [Fusion] use vectorN instead of vector for shorter names #define to allow testing if unused_type has IO [Interprocess] Ticket #2766: error in boost::interprocess::file_lock::swap [intrusive] Ticket #2755: compile error in boost_intrusive 1.38.0: a set of classes with protected destructor [Spirit] Fix: rename "boost::math" to "boost::spirit::math". Remove :: from memcpy() [Serialization] Correction to extended_type_info implementation
123 名前:デフォルトの名無しさん [2009/02/21(土) 13:25:35 ] boost.graphについてですが、 検索を途中でキャンセルするのは例外を使用するしかない? 例:幅優先で検索し、目的のvertexが見つかったらそこで 検索をやめる。 boost.graph自体は基本的な例外安全は確保されているみたい なので例外の使用自体に問題はないとは思いますが・・・。
124 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 13:51:45 ] >>123 それは例外ではないから例外で抜けるのは不適当だろう。
125 名前:123 mailto:sage [2009/02/21(土) 14:02:45 ] 全検索関数を途中やめること自体が例外的・・・。 (言葉遊びですな)
126 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 17:06:21 ] 使用するに足る理由があって他の方法より適当だと思えば 例外でも何でも使えばいいと思うよ 例外だからってエラー処理以外に使わざるべしという論理的根拠はない
127 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 17:11:55 ] エラー処理以外に例外を使って地雷を踏む例は多いんだが、地雷原と知ってもなお進むというなら止めはしない。
128 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 17:14:17 ] 実装できないよりましだな
129 名前:123 mailto:sage [2009/02/21(土) 17:46:38 ] >>126 >例外だからってエラー処理以外に使わざるべしという論理的根拠はない 同意です。ただ他の方法があるのかという質問です。 例外使えないときもあるし。 >>127 具体的には? 例外安全に関する話題?
130 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 18:05:52 ] 見つからないってのはエラーではないのか?
131 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 19:11:13 ] 例外は単なるステートメントの1つである。
132 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 19:30:14 ] 例外しか方法ないなー 全部黒にしてvisitorの実行を抑制することならできるけど それでも走査することには変わりねぇしな つうことは見付かった時点で全部を辿るって前提が満たされなくなるから例外でいいんじゃないと
133 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 23:53:50 ] 別にチョコボの不思議なダンジョンのリサイクルボックスみたいに n回使ったらバグが発生するとかそういうものでもないんだから、 そこまでして忌避したり意味を考えたりとかしなくていいんじゃなかろうか。
134 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 00:16:53 ] Let's Boostの人スゲーなアグレシップすぎwwwwwwwwwwwwwwww
135 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 00:51:26 ] なんか変わってる? そういや中の人は院卒業したんだっけか。
136 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 08:04:34 ] >132 >全部黒にしてvisitorの実行を抑制することならできるけど TerminatorFunc を使うってことでいいですか?
137 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 09:48:29 ] >>135 名前と写真が出るわ出るわ
138 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 10:27:09 ] 海外では顔出しも本名出しも普通だろ ガキじゃねーんだからキャーキャー騒ぐなよ
139 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 16:50:27 ] クラスのメンバ関数をパラメータ的に扱いたいんだけどどうすればいいかな。 こんな感じのことがしたいんだけど。 class A { public: void func_a1(); void func_a2(); }; class B { public: void func_b(); } template<???> void call_twice(???) { //オブジェクトとメンバ関数を引数にとってメンバ関数を2回呼ぶ } int main() { A a; B b; call_twice(a,func_a1); call_twice(a,func_a2); call_twice(b,func_b); }
140 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 17:24:13 ] つ boost.function
141 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 17:33:21 ] 単にメンバ関数へのポインタを使えば十分だろう。 Boost的には、bind使えば引数一つにまとまられるよと言うくらい。
142 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 18:17:25 ] そのレスはほんとうに単純にメンバ関数へのポインタを渡すような誤解を与えるぞ。 メンバ関数へのポインタをどう使うのかを書かないと。 このスレ的には>>140 を使うことを前提にしてるんだろうけど。
143 名前:139 mailto:sage [2009/02/22(日) 21:29:21 ] レスどうもです。 boost.function使ってみました。結構いい感じ。 で、つかぬことをおききしますがboost::functioinを使った場合インライン展開はされるのでしょうか。 速度が必要なもんで気になります。 一応アセンブラをみて見たんですが俺にはよくわからない。(´・ω・`) 関数ポインタならインライン展開されなさそうなきがするんですが。
144 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 21:42:00 ] されないね。
145 名前:139 mailto:sage [2009/02/22(日) 21:47:28 ] そですかー(´・ω・`) ありがとうございます。 boostってテンプレートだけじゃなくて意外と中でマクロも使われてるんですね。 いっそマクロの併用も検討するか…
146 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 21:58:17 ] ちなみに関数ポインタもあんまインライン展開はされないぞ。
147 名前:141 mailto:sage [2009/02/22(日) 21:59:17 ] >>142 単にこれでいいだろうというつもりで書いた。やや楽観的期待だが、インライン展開もされるだろう template<typename T> void call_twice(T x, void (T::*p)()) { (x.*p)(); (x.*p)(); } int main() { A a; B b; call_twice(a, &A::func_a1); call_twice(a, &A::func_a2); call_twice(b, &B::func_b); }
148 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 22:02:38 ] >>143 速度が必要なら仮想関数や関数ポインタは向かないね。 テンプレートで展開されるようにしたほうがいいかも
149 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 23:51:22 ] 147くらいのコードだと頭のいいコンパイラはインライン展開しちゃうけど、 たぶん142は何らかのデータ構造にメンバ関数を保存して必要なときに 実行とかいう使い方をするだろうから最終的には間接参照が最低一回 必要になると思う。 とりあえずテンプレート使ってみた版 template <class T, void (T::* func)()> void call_twice(T t) { (t.*func)(); (t.*func)(); } int main() { A a; B b; call_twice<A, &A::func_a1>(a); call_twice<A, &A::func_a2>(a); call_twice<B, &B::func_b>(b); }
150 名前:139 mailto:sage [2009/02/23(月) 00:15:36 ] >>149 うおっ!なんかすごいのきたw テンプレートの引数にvoid (T::* func)()なんて使えるのかー。 カルチャーショックだぜ。 もっと精進せねば。 どうもありがとうございます。
151 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 11:43:44 ] >>149 この形式だと inline 化されるというのを昔 Cryolite 氏が実験してたな
152 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 12:18:33 ] テンプレート引数に関数クラスを渡す方法ならかなり自由度が上がるかも
153 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 16:41:31 ] ひとつ相談なのですが、初期サイズの違う複数のpoolを同時に使うくらいなら boost::pool<> pool(1) にして (T*)pool.ordered_malloc(sizeof(T)) でひとつのpoolを共有すべきですか?
154 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 18:32:23 ] >>153 サイズの種類が限られてるなら同時につかえばいいんじゃないか?
155 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 18:41:34 ] やったことは無いんだけど、4バイト未満のチャンクって作れるのかな
156 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 09:25:08 ] >>153 以前ordered_mallocを使ってnew []演算子を作ろうと思って試したことがあるが、 普通のnew[]演算子よりむちゃくちゃ重くなった。 おそらくメモリプールに指定のサイズの領域が空いてるかどうかチェックする処理が重いんだと思うけど…
157 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 09:45:16 ] 常識的に考えて、その方法が速いならnewの実装なんてとっくにそうなってるに決まってるだろ……
158 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 10:43:02 ] >>154-157 ありがとうございます。参考になりました 今回は型ごとにpoolを作ろうと思います ordered_mallocが使用される回数を極力抑えられるように書いてみます
159 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 20:17:56 ] boost::lambda::bindで下のコードがコンパイルエラーとなります。 (1)のところを la::bind(&human::use, man, la::var(t))(); としても同じでした。 因みにboost::bindを使用した場合は bind(&human::use, man, ref(t))(); とするとコンパイルエラーが発生しないようになりました。 lambda::bindを使用した場合にでるコンパイルエラーを回避する方法はないでしょうか? 環境:WinXP, VC8, boost1.38.0 // main.cpp #include <boost/lambda/bind.hpp> #include <boost/lambda/lambda.hpp> #include "create.hpp" #include "human.hpp" #include "tool.hpp" namespace la = boost::lambda; int main() { human man; tool* t(create_tool()); // toolは抽象クラス la::bind(&human::use, man, t)(); // -----(1) delete t; }
160 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 20:18:48 ] 長いので分割失礼します。 // human.cpp 略... void human::use(tool* t) { t->hoge(); } 略... // tool.hpp class tool { 略... virtual void hoge() = 0; 略... [コンパイル] main.cpp \XXX\boost/tuple/detail/tuple_basic.hpp(419) : error C2259: 'tool' : 抽象クラスをインスタンス化できません。 次のメンバが原因です: 'void tool::hoge(void)' : は抽象型です \YYY\tool.hpp(6) : 'tool::hoge' の宣言を確認してください。
161 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 20:55:08 ] 突然ですが、おまえらに問いたい! boostのイメージカラーは何色?
162 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 21:01:09 ] マ板でやれ
163 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 21:03:29 ] >>161 失せろクズ
164 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 21:48:39 ] >>161 二度とくんなカスが
165 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 21:49:15 ] >>161 VIPでやれ
166 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 21:53:55 ] ここまで俺の自演
167 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 22:12:16 ] >>159 create_toolの中は?
168 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 22:21:11 ] >>162 〜166 オメーも反応すんなヴォケ しかも一人で無駄に投稿すんな。
169 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 22:23:56 ] 159です。 >> 167 // create.cpp class hammer : public tool { public: 略... void hoge() { // 実装 } 略... }; tool* create_tool() { return new hammer; } といった感じです。 toolの具象クラスのhammerは表に出ないようになっています。
170 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 23:17:28 ] >>169 とりあえずboost::refをつけたら、こっちではコンパイル通った la::bind(&human::use, boost::ref(man), t)(); // -----(1) GCC 4.0.1, boost 1.38.0
171 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 23:59:16 ] 159です。 >>170 確かに void human::use(tool*); ならそれで通りますね。ありがとうございます。 私の実際のコードでは void human::use(tool&); となっていまして、教えて頂いたようにしても同じコンパイルエラーが発生してしまいます。
172 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 07:01:49 ] >>171 *と&はまったく違う意味だぞ。 そこで一時オブジェクトを作ろうとしてエラーになってるんじゃないのかconst tool&にしてみろ
173 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 09:59:28 ] 159です。 >>172 void tool::hogeがconstでないのでtool const&とはできません。 一度実際のコードを載せてみます。 // create.hpp #pragma once struct tool; tool* create(); // create.cpp #include <iostream> #include "create.hpp" #include "tool.hpp" using namespace std; struct hammer : tool { void effect() { cout << "gotin\n": } tool* create() { return new hammer; } // human.hpp #pragma once struct tool; struct human { void use(tool& t); } // human.cpp #include "human.hpp" #include "tool.hpp" void human::use(tool& t) { t.effect(); }
174 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 10:00:01 ] // tool.hpp #pragma once struct tool { virtual ~tool() throw() {} virtual void effect() = 0; }; // main.cpp #include <boost/lambda/bind.hpp> #include <boost/lambda/lambda.hpp> #include <memory> #include "create.hpp" #include "human.hpp" #include "tool.hpp" using namesace boost; using namespace std; namespace la = lambda; int main() { auto_ptr<tool> t(create()); human man; la::bind(&human::use, la::var(man), la::var(*t))(); }
175 名前:デフォルトの名無しさん [2009/02/25(水) 11:30:52 ] struct pred { pred(int){}; ←(A) void operator()(int v) const { std::cout << v << "\n"; } }; boost::function_output_iterator<pred> fi(pred(0));←こうするには(A)が必要 boost::function_output_iterator<pred> fi(pred());←(A)を消してこう書くことができない←(B) std::vector<int> v(boost::counting_iterator<int>(0),boost::counting_iterator<int>(10)); std::copy(v.begin(), v.end(), fi);←(B)だとここでエラー std::copy(v.begin(), v.end(), boost::make_function_output_iterator(pred()));←これだと(A)がなくてもOK make_function_output_iteratorは(B)と同じことしているんじゃないの?
176 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 12:25:21 ] const tool&を使わずに抽象クラスを渡すには、どうにかしてコピー可能にする必要がある。 tool*を使うか、ref(t)で渡す。
177 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 13:16:26 ] 159です。 >>176 tool*でならmain.cppの最終行を la::bind(&human::use, la::var(man), t.get())(); としてやれば良いのですが tool&をhuman::useの引数にすると la::bind(&human::use, la::var(man), la::var(*t))(); は、やはりエラーとなりますね。 la::bind(&human::use, la::var(man), boost::ref(*t))(); としてもエラーです。 腑に落ちないのが boost::bind(&human::use, boost::ref(man), boost::ref(*t))(); ならコンパイルが通ること。 lambdaの内部を追っているわけではないのでなんともいえませんが、 ユーザからすると、この動作は奇妙に思えます。 boost::bindとboost::lambda::bindは互換性があると勝手に思っていたの で意外です。 boost::cref => boost::lambda::constant_ref boost::ref => boost::lambda::var という理解も間違っているのでしょうか?
178 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 14:13:20 ] main.cpp \XXX\boost/tuple/detail/tuple_basic.hpp(419) : error C2259: 'tool' : 抽象クラスをインスタンス化できません。 次のメンバが原因です: 'void tool::hoge(void)' : は抽象型です \YYY\tool.hpp(6) : 'tool::hoge' の宣言を確認してください。 とでてるので、抽象クラスをやめたら la::bind(&human::use, man, (*t); でエラーにならない。 lambda::bindのどっかで抽象クラスをインスタンスかしようとしてるんだろう
179 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 14:15:02 ] マニュアル読む限り boost::ref => boost::lambda::var は間違ってると思う。 boost::ref は参照型だけど、lambda::var は参照じゃない
180 名前:179 mailto:sage [2009/02/25(水) 14:34:38 ] >>179 すまん、間違ってた。 やっぱ参照みたい。
181 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 15:05:38 ] boost.cppll.jp/HEAD/libs/lambda/doc/ar01s04.html
182 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 17:31:50 ] 159です。 >>181 そのページは私も読みました。 boost::refはboost::lambda::varに置き換えられると理解しております。 >>178 でしょうね。 しかし、実装上の事情はどうであれ、インタフェースとしては抽象クラスの参照を bindの引数にすることを可能としていなければいけないように思えます。 何か回避策がlambdaにあるのではと思うのですが直ぐには見つけられませんね。 ご存知の方いないでしょうか?
183 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 17:55:58 ] la::bind(&human::use, la::var(man), la::var(boost::ref(*t)))(); でどうか?
184 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 17:57:52 ] >>182 抽象クラスはインスタンス化できない。それをしようとしているからエラーになる。 テンプレートの引数に参照で渡したいときはref( )を使えば参照が渡せる。
185 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 18:05:31 ] >>182 >>159 >bind(&human::use, man, ref(t))(); boost::bind できるんなら、boost::lambda::bindにこだわる必要ないでしょう
186 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 18:10:46 ] bindのプレースホルダによる汚染が怖いとかじゃないんでしょうか
187 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 18:25:05 ] 159です。 >>183 目から鱗ですね。 それでいけました。 ありがとうございます。 >>185 boost::bindとboost::lambda::bindの混在は面倒なトラブルが発生することが あるので避けています。 皆さんありがとうございました。 他にもスマートな方法があればお教え頂きたいと思います。
188 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 18:27:25 ] >>183 それでいける理由が知りたい
189 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 18:44:07 ] 簡単に言うならreference_wrapperとidentityにより型の解決が遅延されて、 早期の解決によって束縛される値が参照型から値型になってしまうことを防ぐことができるから かなぁ
190 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 21:07:02 ] lists.boost.org/boost-users/2005/07/12450.php
191 名前:デフォルトの名無しさん [2009/02/26(木) 16:50:17 ] 「参照型から値型がになってしまう」とはどんな具体的にどんな状況ですか? できれば最小のサンプルソースが見たいです。
192 名前:デフォルトの名無しさん [2009/02/26(木) 16:51:37 ] >>189 「参照型から値型がになってしまう」とは具体的にどんな状況ですか? できれば最小のサンプルソースが見たいです。 typo があったので再投稿。
193 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 18:09:02 ] まだtypoがある件
194 名前:189 mailto:sage [2009/02/26(木) 19:39:19 ] >>191 一言で言えば、remove_referenceを使えばそうなる。 以下、var(ref(*t))で上手くいくかの理由の大まかに解説する remove_referenceはメタ関数deduce_non_ref_argument_typesで使われている、 このメタ関数はlambda_functor_baseが具現化される際に、束縛する値の型を保持する為のタプルの型の要素に対して適用される。 なのでvar(ref(*t))以外での渡し方をすると型計算の結果、tool&やconst tool&を要素として持つタプルの型が生成される。 するとtupleを構成する型に抽象型toolが含まれてしまい、tupleを実体化するときにtoolを実体化しようとしてエラーになる。 実際はtupleはconsで実装されているのでコンパイルエラーはconsのheadメンバの宣言の時点で発生する。 そこでduduce_(ryの時点でreference_wrapper<tool>になるようにしてremove_referenceを防ぐためにboost::ref()を使うわけだけど、 boost::refだけだとbindに渡された時点でbind_tuple_mapper内での型の解決によりtool&型になってしまうので、それを防ぐためにvar()を使う。 すると問題になっているtupleの要素の型はdeduce(ryを経てもidentity<reference_wrapper<tool> >のままになり、 結果boost::lambda::bindの返す関数オブジェクトはこの関数オブジェクトをそのままtupleの要素として保持することになる。 そしてこのidentity<reference_wrapper<tool> >は生成した関数オブジェクトが呼び出される際、つまりoperator()が解決されるときに、 identity、reference_wrapperの解決を経てtool&として解決される。 要するに>>189 というわけだ。 これ以上詳しく知りたければboostのコード読んでください。
195 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 23:28:29 ] 乙
196 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 22:01:56 ] 更新しました。今週はソースの追加や削除が多いです。 ビルド用の設定ファイルもチューニングされ、今迄フルビルドに1時間弱掛かっていたのが20分に超高速化されました。 ttp://booster.x0.to/ 以下更新内容の一部 [Gil] GIL: fixed Ticket 784: Wrong initilization of data members in packed_pixel constructors [Utility] Fixed const issue of value_initialized according to ticket #2548. [Functional] adds missing template parameters for partial specialisations Fix the hash dirname. [Serialization] fixed namespace [Archive] permit start/end load/save to be overridable [Fusion] updates functional module: only two unfused variants, now Fix: remove non-existent test [Random] Initialize _modulus in the linear_congruential constructor that takes a pair of iterators. Fixes #2665 [Unordrered] Make copy_buckets and move_buckets member functions - so that calling them is a bit simpler. Move some of the data structure classes out of hash table data. [Config] Merge branches/cpp0x into trunk, enabling a bunch of BOOST_NO_* macros for C++0x early adopter feature tests [Math] Merges changes from Sandbox version: MPFR Support. New distributions: laplace, logistic and hypergeometric. Added C# usage example.
197 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 01:30:27 ] >今迄フルビルドに1時間弱掛かっていたのが20分に超高速化されました マジかよwwwww
198 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 10:06:36 ] RubyのModule的なことをしたいんだけど可能? 関数を用意しておいて他のクラスにその関数をメンバとして追加したいです。 Rubyのコードだと以下のようになります。 module MyModule def extend_function print "extend_function\n" end end class MyClass include MyModule end object=MyClass.new object.extend_function
199 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 10:10:56 ] C++0xスレで拡張メソッドが話題になったばかりだから覗いてみるといいかな
200 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 03:21:34 ] >198 struct MyModule { void extend_function() { // …… }; }; class MyClass : public MyModule {}; 派生クラスを操作する必要がある場合は template<typename T> struct MyPolicy { MyPolicy& self() { return *(static_cast<MyPolicy*>(this)); }; void extend_function() { // …… }; }; class MyClass : public MyPolicy<MyClass> {};
201 名前:200 mailto:sage [2009/03/02(月) 03:22:29 ] あ、間違えた template<typename T> struct MyPolicy { MyPolicy& self() { return *(static_cast<T*>(this)); }; void extend_function() { // …… }; };
202 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 04:05:44 ] >>201 selfの戻り値もT&だろ。
203 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 09:50:38 ] 大元のclass MyClassの記述を変更せずに、という(多分)そもそもの目的に外れるのでは。 何か便利な文字列操作メソッドを追加したいとかで使うんだろうけど、 std::string弄るわけにはいかないし。
204 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 13:34:46 ] 思ったんだけどstructとclassの違いって何だろう?
205 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 13:37:18 ] >>204 継承とメソッドのデフォルトがpublicかprivateかの違いだけ
206 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 13:42:52 ] Boost.Iterator使ってイテレータ作るときのオブジェクトはstructにしないとコンパイルエラー出るな デフォルト継承の問題のようだが
207 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 20:36:56 ] >206 つ friend class boost::iterator_core_access;
208 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 21:25:08 ] ARM用にクロスコンパイルができない。bjamで正しく設定すればコンパイル通るのか
209 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 22:44:20 ] 更新しました。 ttp://booster.x0.to/ 以下更新内容の一部 [Config] config: add cpp0x files not added after merge config: fix both BOOST_HAS_LONG_LONG and BOOST_NO_LONG_LONG getting defined at the same time for some compilers [Math] Add option to disable use of std::fpclassify. Fix for no long double support. [Bind] Make bind.hpp and mem_fn.hpp forward to bind/bind.hpp and bind/mem_fn.hpp. (Ref #2238) [Unordered] Add missing return for operator=. [Smart_ptr] Move smart_ptr into boost/smart_ptr/*.hpp (refs #2239). Fix enable_shared_from_this-related tickets in trunk. Refs #2126. Refs #2584. [Signals2] Merged Signals2 from sandbox to trunk. [Graph] Fix: Avoid compiler warning if BOOST_NO_HASH is already defined.
210 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 23:57:23 ] あのーーー >>209 にうpされてるのVC2005では使えないんですか?
211 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 00:47:58 ] VC2008SP1でビルドしておりますので、VC2005では恐らく使えないと思います。 次回からその旨分かる様に、ファイル名に"VC2008"を追加致します。
212 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 00:53:37 ] >>211 そうなんですか、同じコンパイラメーカーのでもバージョン違うと駄目なんですか,orz
213 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 04:54:22 ] >212 少し古いバージョンで良いならこっから落とせるよ。 2003, 2005, 2008 用をインストール時に選択可能。 ttp://www.boostpro.com/products/free
214 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 09:40:22 ] コンパイラによって関数の対応状況変わるから調べたほうがいいよ
215 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 14:57:29 ] 最近はヘッダファイルをジャンルごとにディレクトリ切るように移行中なのか。 あとspirit使うとclassicのヘッダファイル使えと警告出るんだけど、classicじゃないspiritの使い方って どっかに書いてあるんだろうか・・・(公式ドキュメントも前のまんまだった)
216 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 15:05:58 ] >>215 spiritはV2になるから準備じゃないか?今のマニュアルがclassicに相当するようだ。 俺も最近spirit始めたところで悩んだ。 classicヘッダは名前空間がclassicに変わってるから注意だ
217 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 20:47:14 ] すでに自己解決した問題なんだけど、ぐぐっても日本語の情報が見つからなかったので、垂れ流しておきます。 環境依存(MinGW)っぽい話で、ここに書くべきか分かりませんが。自分の環境は OS: Windows XP (Home Edition, SP2) コンパイラ: gcc version 3.4.5 (mingw-vista special r3) boost 1.38.0 <boost/date_time/filetime_functions.hpp> がインクルードされるときに以下の警告が出ます。 > (略)/boost/date_time/filetime_functions.hpp:101: warning: left shift count >= width of type この警告は、該当のファイルの99行目と100行目の UL を ULL に書き換えると出なくなります。 書き換え前 > const uint64_t c1 = 27111902UL; > const uint64_t c2 = 3577643008UL; 書き換え後 > const uint64_t c1 = 27111902ULL; > const uint64_t c2 = 3577643008ULL; こういう解決法でいいのか、よく分かりませんが。今のところ Boost Trac のTicket #2809で報告されています。
218 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 15:59:34 ] > const uint64_t c1 = UINT64_C(27111902); > const uint64_t c2 = UINT64_C(3577643008); じゃ駄目なの?
219 名前:217 mailto:sage [2009/03/13(金) 16:26:19 ] >>218 そっちのほうが良さそうですね。(そのマクロは初めて知りました) 私の環境では、マクロ __STDC_CONSTANT_MACROS を自分で定義しないとUINT64_Cが使えませんでしたが、 定義するとうまく行きました。後の人の参考までに。
220 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 17:54:45 ] 更新しました。 ttp://booster.x0.to/ 以下更新内容の一部 [Signals2] some inspect cleanups (mostly getting rid of tabs). Finally fixed some odd test errors on msvc9. [Smart_ptr] De-optimize assignment into this_type(r).swap(*this) Attempt to fix como link failure. [Functional] Move hash_fwd into the hash subdirectory. Remove deprecated headers. [Math] Misc. small platform specific fixes and expected error rate adjustments. [Fusion] Protected unused_type by an ADL barrier [Numeric] added unit test for LU decomposition add new constructor from vector to permutation matrix [Serialization] checked in new type trait - is_virtual_base_of.hpp Try new version of is_virtual_base_of.hpp [Wave] Wave: now compiles even with BOOST_FILESYSTEM_NO_DEPRECATED defined [Typeof] BOOST_TYPEOF_NESTED_TYPEDEF now supports expressions containing "this" for VC compilers [Detail] Initial commit. [Config] Added configuration macros BOOST_NO_AUTO_DECLARATIONS and BOOST_NO_AUTO_MULTIDECLARATIONS. [Function] 60% speedup on a micro-benchmark that copies and calls such function objects repeatedly.
221 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 00:17:11 ] boost1.36.0を使っているのですが、ファイルの絶対パスから相対パスを取得する良い方法は何か無いでしょうか…?
222 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 00:29:11 ] あれ?relative_path()ってまさにそのためのメソッドじゃなかったっけ?
223 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 17:05:03 ] ublasにqr分解する関数ないですか? lu分解はあるようなんですけど
224 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 18:58:20 ] >>223 「ublas qr分解」で検索すると、boost.ublasで実装した例が見つかるくらいだから、 直接qr分解するような関数はないんじゃね?
225 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 13:45:04 ] pythonのc apiが変更になるみたいだけど boost.pythonは対応してくれるんだろうか 特に日本語文字列を渡せるかあたりが変わるとか
226 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 15:24:07 ] この機会にLuaとかSquirrelとかに移行してみるというのはどうだろう。 いやもちろん用途次第だけど。
227 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 15:46:02 ] v8でJavaScriptとか・・・ 試してみたらかなり楽に使えたんでびっくりした
228 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 17:49:16 ] >>226 Boost.Luaとか期待しています。
229 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 18:07:26 ] pythonってライブラリのサポート率が凄く高いんだよね。 だから簡単に他に移行するのは、結構難しいんじゃないかな。
230 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 09:20:09 ] じゃあ俺はBoost.AngelScriptを期待。
231 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 18:54:29 ] 更新しました。 ttp://booster.x0.to/ 以下更新内容の一部 [Type_traits] Add is_virtual_base_of. Add extra tests for is_base_of to test virtual inheritance. [Math] Add instrumentation code and some FPU control options. Updated the sign functions to use Johan Rade's fp-utilities code. [Serialization] Use new is_virtual_base_of [Config] Revert 51733 - it broke the regression testing system [Proto] work around issue with <termios.h> #define'ing B0 add proto::noinvoke to block metafunction invocation in ObjectTransforms [Tuple] fixed tuples::length not having a specialization for const tuple<> and const null_type
232 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 00:16:11 ] 以下のコードでVC++2005だとエラーは出ませんがIntelC++11だと「オペランドの型に互換性がありません ("boost::foreach_detail_::rvalue_probe<const ListInt>" と "const ListInt")」というエラーが出ます。どうしたら回避できるんでしょうか? #include <boost/foreach.hpp> #include <list> typedef std::list<int> ListInt; int _tmain(int argc, _TCHAR* argv[]) { ListInt A; ListInt& B=A; const ListInt& C=A; BOOST_FOREACH(const int& i,B) { } BOOST_FOREACH(const int& i,C) //ここでエラー { } return 0; }
233 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 09:12:24 ] まったくの勘で物をいってすまないが、 BOOST_FOREACH(int const& i,C) とかでだめかな?
234 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 09:35:01 ] BOOST_FOREACH(const int& i,C) も BOOST_FOREACH(int const& i,C) も同じ意味
235 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 09:37:23 ] そもそもconst int&でなくintにしてみたらどうだろう。 それでだめならforeachの実装覗くしかないんじゃね。
236 名前:デフォルトの名無しさん [2009/03/21(土) 12:06:26 ] class step_iterator : public boost::iterator_facade<step_iterator,int , boost::bidirectional_traversal_tag> { public: explicit step_iterator(int v, int s = 1):value(v), step(s){} private: friend class boost::iterator_core_access; void increment() { value += step; } void decrement() { value -= step; } int& dereference() const { return value; } bool equal(const step_iterator& other) const { return value >= other.value; } int value; int step; };
237 名前:236 [2009/03/21(土) 12:07:13 ] >>236 int に対する iterator で increment でstepずつ増やす iterator を 作ってみてるのですが、dereference() の箇所で error C2440: 'return' : 'const int' から 'int &' に変換できません。 とエラーになってしまいます。 メンバーのvalueをintへのポインターにして、dereference()で*valueを 返す様にしたら期待した動作をしてくれます。 また、const_cast しても期待した動作になります・・・ なぜ、int では駄目なのでしょうか?
238 名前:デフォルトの名無しさん [2009/03/21(土) 12:46:15 ] d.hatena.ne.jp/electrolysis/20090220/1235059204 ここのUDP通信のソースで質問なんだけど、 send_to()ではIPとポート指定してるのに、 何故recv_from()では必要無いんですか? boost::asio::ip::udp::socket がIPとかを記録するんじゃないかと思ったんだけど、 リファレンスマニュアル見ても明確に書いてなかった
239 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 14:32:08 ] >>236 メンバ関数のconst外す or 戻り値にconst付ける >>238 郵便を送るには送り先住所が必要ですが、受け取るにはポストを設置しておけばいいだけです。 receive_fromに渡しているendpointは差出人の住所を受け取るためのバッファです。 ちなみにそのページの非同期コードは未定義だね。
240 名前:デフォルトの名無しさん [2009/03/21(土) 15:00:11 ] >>239 >>戻り値にconst付ける error C2440: 'return' : 'const int' から 'int &' に変換できません。 >>メンバ関数のconst外す error C2662: 'step_iterator::dereference' : 'const step_iterator' から 'step_iterator &' へ 'this' ポインタを変換できません。 iterator_core_access::dereference が static typename Facade::reference dereference(Facade const& f) { return f.dereference(); } だから const はずせないです。
241 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 15:04:38 ] >237 > int& dereference() const const メンバ関数なので this は const step_iterator*。 従って、メンバの value も const int になります。 これは変更不可能なので、変更可能な参照 int& として返すことができません。 value を int* にした場合は、int * const になり、ポインタ値としては const ですが、 指している int の値は変更可能なので int& にできます。 > public boost::iterator_facade<step_iterator,int , boost::bidirectional_traversal_tag> > int& dereference() const ではなくて > public boost::iterator_facade<step_iterator,const int , boost::bidirectional_traversal_tag> > const int& dereference() const でどうでしょう?
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だろうと大した差はないと思うけど
343 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 19:25:06 ] >>342 たしかに大差ないんだが、indexでのアクセスはやっぱ生より遅い。
344 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 19:42:39 ] >>343 つまりは 実行スピードは std::vector > boost::array >> 生の配列 か。
345 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 19:44:31 ] それ実行時間w
346 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 19:54:37 ] >>345 アウチ! 間違ったw
347 名前:デフォルトの名無しさん [2009/04/18(土) 21:29:19 ] vectorと、固定長配列の違いは、動的かそうでないかだけでは。 vectorだと多く確保できるけど、HDDに移される可能性がありそれが速度低下の原因では
348 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 21:37:16 ] 環境依存の原因なんか挙げ始めればきりがない。 理論的には O(1) で同じと考えられる。
349 名前:338 mailto:sage [2009/04/18(土) 21:43:22 ] >>342-348 なるほど。 みなさま貴重なご意見ありがとうございます。
350 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 21:44:05 ] オーダーの話されてもなぁ。 ハッシュだって理屈の上ではO(1)だぜ?
351 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 21:51:09 ] >>350 で、何の話がしたいの?
352 名前:デフォルトの名無しさん mailto:sage [2009/04/19(日) 01:58:00 ] >>347 固定長配列は、(自動変数なら)スタックポインタを減算するだけで確保できる。 それと比べれば、ヒープから空きメモリを探してくるvectorというかnew[]は確保に時間がかかる。 その点ではboost::arrayが組込の配列と比べて遅くなる要素は無いはずなんだけど。 (もちろん最適化がしっかりしていて、アサート全OFFという前提のもと)
353 名前:デフォルトの名無しさん mailto:sage [2009/04/19(日) 03:27:48 ] > std::vector > boost::array >> 生の配列 なんか激しく疑わしいので比べてみた。@i386 gcc 4.1.2 -O2 for (size_t i = 0; i < size; ++i) cout << v[i] << endl; 生配列 .L21: movl (%edi,%ebx,4), %eax addl $1, %ebx movl $_ZSt4cout, (%esp) movl %eax, 4(%esp) call _ZNSolsEi movl %eax, (%esp) call _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_ cmpl %esi, %ebx jne .L21 vector .L15: movl (%edi), %eax movl (%eax,%ebx,4), %eax addl $1, %ebx movl $_ZSt4cout, (%esp) movl %eax, 4(%esp) call _ZNSolsEi movl %eax, (%esp) call _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_ cmpl %esi, %ebx jne .L15 まあ、確かに遅くはなると思うが・・・
354 名前:デフォルトの名無しさん mailto:sage [2009/04/19(日) 12:48:08 ] movl 2回で済むところが3回になるのだから、そこだけみると結構遅いだろ?
355 名前:デフォルトの名無しさん mailto:sage [2009/04/19(日) 13:06:42 ] movl (%edi), %eax movl (%eax,%ebx,4), %eax すごく無意味なことしてる気がするんだけど気のせい? なんでこんなことしてるんだろ?
356 名前:デフォルトの名無しさん mailto:sage [2009/04/19(日) 13:25:25 ] たまたま反復文の中が1行だったから比較的コストが高そうに見えるけど、 普通はそうじゃないよな。 うちのPCで国家予算分のジャリ銭を数え上げたら数分差が出るかもしれないけどさ。 (それでも分岐予測ミスによる揺らぎよりは小さそう・・・) 結局ありきたりの結論だけど vectorが遅いかもしれないから生配列を使うことを検討するのに時間を使う方が よっぽどコスト高だな。 int* vv = &v[0]; for (size_t i = 0; i < size; ++i) { cout << vv[i] << endl; } とかすれば生配列と全く同じ速度になるわけだし。
357 名前:デフォルトの名無しさん [2009/04/19(日) 13:33:27 ] 確保される場所が違うだろ。 スタック上ではHDDにはうつりにくいけど 動的確保したらうつりやすい
358 名前:デフォルトの名無しさん mailto:sage [2009/04/19(日) 13:52:46 ] >355 vector から先頭アドレスをロード。 要素の内容をロード。 だから無意味だとは思わないが、なんで? 毎回先頭アドレスをロードするのが無駄ってこと?
359 名前:デフォルトの名無しさん mailto:sage [2009/04/19(日) 14:39:29 ] >>357 それは生配列かどうかとは違う問題では? そもそも速度の変化を検知できるほど大きな配列をスタックに配置したら 数ページまるまる配列データだけになったりして、 そのページにアクセスする確率(≒スワップされない確率)は ヒープ領域と変わらなくなってしまうんじゃないか? ていうかメモリ増やせ。
360 名前:デフォルトの名無しさん mailto:sage [2009/04/19(日) 17:51:13 ] うん、まぁほとんどの場合、生かvectorかで差がでることは メモリの再配列以外では無いのは確かなんだ。 でも1.5倍以上の差がでる可能性があるのも間違いないからね。 どちらにするか悩むのは無駄だが、知識として抑えておくのは 悪いことではないでしょう。
361 名前:デフォルトの名無しさん mailto:sage [2009/04/19(日) 18:39:44 ] >>358 生配列みたく movl (%edi,%ebx,4), %eax の1行でいいんじゃないの?ってことじゃないかと。
362 名前:デフォルトの名無しさん mailto:sage [2009/04/19(日) 18:41:40 ] >>361 まぁそうだとしたら >>355 は、レジスタの値とレジスタの値が指す先を混同してるってことか
363 名前:338 mailto:sage [2009/04/19(日) 22:55:36 ] ええと、皆様ありがとうございます。 アセンブラは全然理解出来ていないのですが、 頑張ってよく読ませていただきます。
364 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 00:21:29 ] >1.5倍以上の差がでる可能性があるのも間違いない どこからそんな結論が
365 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 00:57:25 ] >>360 まず、お前がもっと深い知識を蓄えてから発言しろ
366 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 06:23:45 ] 相手にも言えるレスで相手を馬鹿にしても、効果は薄いし説得力にも欠ける。
367 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 09:28:05 ] shared_ptrって参照数を保持する変数をnewしてるんだよね。てことは、 shared_ptr<int> pn(new int(0)); とか書くと、intはnewできてコンストラクタ内でnewが例外投げるとintのポインタが行方不明になる? うん、なるな。
368 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 09:35:15 ] >>367 なんでドキュメントを読まずに「行方不明」とか意味のわからない結論で納得するの? www.boost.org/libs/smart_ptr/shared_ptr.htm#constructors > Exception safety: If an exception is thrown, delete p is called.
369 名前:367 mailto:sage [2009/04/20(月) 09:46:13 ] うん、ヘッダ見たらすぐにわかった。恥ずかしい。
370 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 11:15:45 ] >>344 352も言ってるけど、何で生配列とboost::arrayで差が出るんだよ 353のループ部を gcc 4.3.3 -O2 で試したけど、まったく同じアセンブラコードになったぞ
371 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 11:38:09 ] お前の世界にはgccしかないのか?
372 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 11:50:44 ] お前はgccよりひどい最適化のコンパイラを使うのか?
373 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 11:51:38 ] multiarrayの方だけど > boost::array<array_type::index,3> idx = {{0,0,0}}; > A(idx) = 3.14; >この方法は次元非依存のコードを書くのに役立ち, >いくつかのコンパイラの下では operator[] よりも高いパフォーマンスをもたらす。 とboost.cppll.jpに解説があるくらいなので、オーバーライドされた[]が最適化 されないケースは間違いなくあるんだろう。
374 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 11:57:18 ] だな
375 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 12:02:56 ] つまり、boost::arrayで速度が問題になるようならより最適化されやすいA(idx)を使えばいいってこと?
376 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 13:43:59 ] 370の言ってることが間違いじゃなければgccなら最適化されるから 速度が問題になることはないだろう。 つまりgcc使えば良いんだよ。 ターゲット環境にgccが無いのなら、移植しろってことなんだろう。
377 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 21:04:20 ] >>375 multiarrayのoperator []が遅くなる要因は一時オブジェクトを作らないといけないからだと思う。 ところで、VC++ 9でも試してみたけど、やっぱりboost::arrayと生配列で出て来るコードは同じだった。 NDEBUGを定義して/O2で。 まあ普通のコンパイラならこれくらいGCCでなくても当然だと思う。
378 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 21:12:30 ] 最適化に関するたいした知識のない俺から見れば g++やVC++の最適化機能ってすんげーんだな と思う。 だって俺、最適化機能のあるコンパイラを作れって 言われても絶対無理だと思う。 そんな「boost::arrayと生配列で出て来るコードは同じ」みたいな ところまで気を回せるコンパイラの作者陣って ホントに尊敬するわ。
379 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 21:26:02 ] boost::arrayのコードを見れば ごく当たり前のことなんだけどな
380 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 21:51:47 ] inline展開様々だな
381 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 03:43:59 ] だな
382 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 22:39:48 ] boost::shared_ptr<MyClass> ptr; これを関数に渡す場合、const参照渡しにした方が望ましいの? それとも STLのイテレータや組み込み型変数のようにconst参照渡しよりコピー渡しの方が望ましいの?
383 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 23:01:47 ] 普通に値渡しの方がいいんじゃない? どうせそこまで速度稼ぎたいわけじゃないだろうし、ポインタと同じように扱うためのスマートポインタだし。
384 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 23:25:38 ] 値渡しじゃないと参照カウント増えないんじゃないか?
385 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 00:19:58 ] >>384 関数内で、別の変数に代入するなどすれば、そのとき増えるので無問題。 それとは別の話で、もしptrの参照先を見るだけだったら、 ただのMyClass&/MyClass const&にすればいいな。
386 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 00:42:04 ] const参照にしとけ。 使ってる場所が多いと、値だと結構クルよ。
387 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 01:19:29 ] 呼び出し元次第。 const参照だと、実際に使うときに実体が存在しない危険がある。
388 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 06:13:57 ] >const参照だと、実際に使うときに実体が存在しない危険がある。 呼び出し元にはshared_ptrがあるのだから、関数実行中に実体が消えることはないと思うんだけど。
389 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 13:11:54 ] >>388 その理屈だとshared_ptr自体いらなくね?
390 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 16:12:07 ] オブジェクトの寿命を自分で管理したいのか、shared_ptrに管理させたいのかで決めれば良いと思う
391 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 20:51:14 ] >>389 なんで?そんな理屈にはならんよ。
392 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 20:53:38 ] >>391 auto_ptrで充分じゃね?
393 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 20:57:57 ] >>392 だからなんでそんなことになるの?
394 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 21:01:08 ] >>392 auto_ptrは使用禁止でもおかしくない。
395 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 21:12:12 ] #define auto_ptr unique_ptr
396 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 21:37:41 ] >>392 おいおい素人にも程があるだろ・・・
397 名前:382 mailto:sage [2009/04/22(水) 22:19:38 ] ふーむ、なるほどね。 そういったことを考えて決定するのが正しいのね。 ありがとう。
398 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 22:46:44 ] 引数は何も考えずconst参照にしといて問題ない
399 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 23:10:09 ] 組み込み型は値渡しがいいなあ
400 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 23:43:04 ] >>398 組み込み型とイテレータは値渡しが望ましいとEffective C++で書かれていた気がするんだが。
401 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 00:11:10 ] 今はshared_ptrの話をしてるんじゃないのか
402 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 00:40:38 ] >388 それはshared_ptrのオーナー次第。関数自体はオーナーじゃ無いことに注意する必要がある。 下記はかなり恣意的な例だけど、マルチスレッドプログラムだとすぐ嵌りそうですな。 struct A { A() : s(new std::string) {}; boost::shared_ptr<string> s; } void doom(std::auto_ptr<A> body, boost::shared_ptr<string>& str) { *str; // boo!! }; int main() { std::auto_ptr<A> a(new A); doom(a, a->s); }
403 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 01:04:44 ] >>402 この例が一体何を示しているというのか。 boo!とか書いてるところで何か起きるわけでもなし。
404 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 01:26:28 ] >>402 それ問題ないです… マルチスレッドについてはconst参照でなく値渡ししたとしても、 コピー操作がアトミックじゃない以上は嵌る可能性があるよ。 shared_ptrの実装自体がconst参照使ってるわけだし、基本はconst参照でいいと思う。
405 名前:402 mailto:sage [2009/04/23(木) 02:11:38 ] 本当?>404 死んでるshared_ptrの参照剥しをしているんだけど? まあ、マルチスレッドについてはアトミックなカウンタじゃないと死ぬっつうのは確かですな。 C++0xでマルチスレッド対応するらしいけど……
406 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 02:14:31 ] >>405 お前、実行してみろ。本当?じゃねーよ。
407 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 02:19:37 ] >>405 doom() を抜けるまでは最初の new A で生成したインスタンスは生きてるように見えるが?
408 名前:402 mailto:sage [2009/04/23(木) 02:53:07 ] あ、本当だ。ごめん。こうしないと死なないね。 まあ、マルチスレッドでもなきゃやらんだろうけど。 struct A { A() : s(new std::string) {}; boost::shared_ptr<string> s; } void doom(std::auto_ptr<A> body, boost::shared_ptr<string>& str) { { std::auto_ptr<A> b(body); } *str; // boo!! }; int main() { std::auto_ptr<A> a(new A); doom(a, a->s); }
409 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 02:59:58 ] >>408 なんかもう shared_ptr も何も関係ないな。
410 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 03:06:30 ] >>408 >>402 がまずいコードなのは確かだけど、*strの問題じゃないよ。 bodyが先に生成されればa->sの時点で死ぬ。 strが先に生成されれば問題なし。 そして引数の評価順は不定であり、評価順依存のコードの実行結果は未定義なので、 コード自体が間違っている。
411 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 03:23:24 ] >>410 a による body の初期化って、順番が不定な「引数の評価」に含まれるの? 5.2.2 Function call の p4 より > When a function is called, each parameter shall be initialized with its corresponding argument. 同じく p8 より > All side effects of argument expression evaluations take effect before the function is entered. とか、読んでみたけどはっきりしない。
412 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 07:40:17 ] まあとにかく、shared_ptrは何も考えずconst参照にしといて問題ないよ。
413 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 12:36:08 ] >>411 5.2.2 p4のこれがそうなんじゃないかなあ。 >The initialization and destruction of each parameter occurs within the context of the calling function.
414 名前:382 mailto:sage [2009/04/23(木) 19:20:17 ] ふーむ。 試しに void foo(const boost::shared_ptr<MyClass> &p) { p->m_func(); } と void foo(boost::shared_ptr<MyClass> p) { p->m_func(); } とだけが異なった2種のソースをg++に渡して-O2でコンパイルさせてみたら、 後者の方が大きかったんだが。 とりあえずこのソースに限り、ファイルサイズはconst参照じゃない方が小さく済むみたい。 実行時間は・・・どうやって調べればいいの?
415 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 20:17:17 ] ?
416 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 20:29:06 ] >>414 とりあえずcodepadかどこかにソースうpしてもらえないとなんとも
417 名前:414 mailto:sage [2009/04/23(木) 20:41:45 ] さすがにエスパー要求しすぎなレスだったね。 すまなかった C++ code - 38 lines - codepad ttp://codepad.org/xAdtSWJO コピーバージョン。 C++ code - 38 lines - codepad ttp://codepad.org/nNuvdFvf const参照バージョン このソースをg++に渡してコンパイラオプション-O2で コンパイルさせてみたら、後者の方が大きかった。 となると、後者の方が効率が悪いってことかなぁ →でも効率を論ずるならやっぱり速度を測定しないとなぁ →速度の実測ってどうすればいいのか分からない ってことです。m(_ _)m
418 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 21:45:07 ] それくらい自分で調べろ、っていうか速度気にするレベルじゃなくない?
419 名前:414 mailto:sage [2009/04/23(木) 23:18:17 ] >>418 それもそうだな。 boostのtimerでも使うか。
420 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 23:28:56 ] const参照は不完全型が許されるのがいい。
421 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 10:10:05 ] デフォでconst参照でいいってぐらいconst T&ばっかりになるから困る
422 名前:414 mailto:sage [2009/04/24(金) 14:56:00 ] 報告: 結局const参照verの方が遅かった。 サンプルソースでだけど。
423 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 15:30:22 ] const& で遅くなることなんてあるんだ
424 名前:414 mailto:sage [2009/04/24(金) 15:53:05 ] >>423 C++ code - 45 lines - codepad ttp://codepad.org/NiHfAcx4 これの void the_function(boost::shared_ptr<MyClass> p) を void the_function(const boost::shared_ptr<MyClass> &p) にしてみたバージョンとで比較してみて。 俺はconst参照verの方が遅くなったよ。
425 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 16:27:09 ] $cat foo.cxx #include <iostream> #include <boost/progress.hpp> #include <boost/shared_ptr.hpp> class MyClass { public: virtual void f(){std::cerr << "MyClass f!" << std::endl;}; MyClass(){std::cerr << "MyClass Constructor!" << std::endl;}; virtual ~MyClass(){std::cerr << "MyClass Destructor!" << std::endl;}; }; void the_function(boost::shared_ptr<MyClass> p){ p->f(); } void the_function_cr(boost::shared_ptr<MyClass> const& p){ p->f(); } int main(){ const int M=0xffff, N=0xf; #define FOO(f) { \ boost::progress_timer t; \ boost::shared_ptr<MyClass> po(new MyClass); \ for( unsigned long i=0; i<M; ++i ) \ for( unsigned long j=0; j<N; ++j ) \ (f)(po); \ } FOO(the_function); FOO(the_function_cr); } $g++ foo.cxx $./a.out 2>/dev/null 0.85 s 0.81 s 誤差じゃね?
426 名前:414 mailto:sage [2009/04/24(金) 16:37:53 ] >>425 おや、俺の環境と逆転した結果か? うーん、どうなんだろう?
427 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 18:01:08 ] >>425 iostreamが重そうだと思ったから、 ダミーの関数呼出(GetCurrentProcess)にしてやってみた。 ただし、N = 0xfffに変更。共に-O2使用。 Cygwin g++ 3.4.4 5.87 s 1.79 s VC++ 2008 SP1 7.70 s 1.12 s やっぱり参照カウンタの操作が重いんだと思う。 ちなみに、BOOST_SP_DISABLE_THREADS(参照カウンタの操作にアトミックなやつを使わない) を指定すると、値渡し版の所要時間が4割くらい減る。
428 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 18:25:28 ] 値渡しのほうが遅くなるのなら納得
429 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 19:51:49 ] 参照よりもコピーコンストラクタが走るほうが速いというのは なんだかおかしな気がするわな
430 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 22:24:06 ] >>414 と>>417 で言ってることが逆なのはどういうことなんだ? 手元ではコピーコンストラクタのほうが実行コードが大きくなったぞ?
431 名前:414 mailto:sage [2009/04/24(金) 22:30:17 ] 俺は二種類のサンプルソースで試したけど参照渡しの方が大きかった。 ・・・もしかして参照渡しになっているところの数によって変化する要因があるとか? あとは最適化か??
432 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 22:34:34 ] >>431 一時オブジェクトが作られてないか?
433 名前:414 mailto:sage [2009/04/24(金) 22:42:48 ] >>432 ちゃんとconst参照渡しだから大丈夫なはずなんだが。。。 う〜ん? まあ速度は・・・誤差かもしれない。 相当回数トライして結果をt検定してみないと有意に早いとは証明できない程度。 でもサイズは誤差じゃなくcopy_verの方が小さいです。
434 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 22:45:23 ] >>431 つまり、>>414 は間違いだったってことでいいの?
435 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 22:48:23 ] 更新しました。ここ暫くはGraphの更新が多いです。それから、Cmakeでのビルド環境が整備されつつある様です。 ttp://booster.x0.to/ 以下更新内容の一部 [Graph] Applied performance patch from Jongsoo Park. Importing null (no-op) property map from SOC/2007. [Math] Add some macro-expansion-suppression code to test_sign.cpp. Fix for no long double math functions. [Smart_ptr] Bring back "explicit" on the auto_ptr rvalue constructor. Refs #2951.
436 名前:414 mailto:sage [2009/04/24(金) 22:49:09 ] >>434 いや、const参照渡し版よりcopy版の方がこちらの環境ではわずかながら早い。 ただそれが有意な差であると言い切れるかは検定してない。 あと、コンパイラのバージョンがg++ 3.4.5(MinGW)であることを追記し忘れたm(_ _)m >とりあえずこのソースに限り、ファイルサイズはconst参照じゃない方が小さく済むみたい これは確か。
437 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 22:49:25 ] [Asio] Don't include termios.h unless BOOST_ASIO_HAS_SERIAL_PORT is defined. [Property_map] Approximated non-ASCII character by ASCII one [Pending] Fixed tab [Signals2] Fix c++0x perfect forwarding for deconstruct. [Functional] Fix float support on vxWorks. [Connfig] Added support for vxworks.hpp. Fixes #2959. [Fsion] Trying to fix ambiguities of operator<<() for unused_type. [Regex] Added possessive modifiers ++ *+ ?+ {}+. Added support for \v and \h as character classes as per Perl-5.10. [Serialization] Add missing 'inline'. Don't include <exception> when excepetions are disabled.
438 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 22:53:49 ] >>436 いや、だからさあ、 >>414 と>>417 であなたが言ってることは逆でしょう? どこかでファイルを取り違えていたりしない?
439 名前:414 mailto:sage [2009/04/24(金) 22:57:07 ] >>438 ごめん 既に>>414 の段階でおかしかった。 吊ってくる。 >つまり、>>414 は間違いだったってことでいいの? おっしゃるとおり逆だ。 >とりあえずこのソースに限り、ファイルサイズはconst参照じゃない方が小さく済むみたい これは正しい。 そして>>435 様に挟む形でレスして申し訳ございません。
440 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 22:59:44 ] >>414 gccのバージョンと環境を教えて。
441 名前:414 mailto:sage [2009/04/24(金) 23:01:51 ] >>440 Windows XP Home Edition SP2 C:\>g++ --version g++ (GCC) 3.4.5 (mingw special) Copyright (C) 2004 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. BoostはRelease 1.37.0
442 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 23:05:51 ] またずいぶんと古いバージョン使ってるなぁ。 うちの会社は未だに2.9系使ってるけど。
443 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 23:07:49 ] >>442 MinGWが未だ3.4.5しか対応してくれていないんだ。 正式版じゃなければ4.x.x系列のもあるらしいんだが。。。
444 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 23:20:21 ] まあまあ、Cygwinだって基本は3.4.4ですよ。別途g++-4とかが入れられるけど。
445 名前:443 mailto:sage [2009/04/24(金) 23:27:12 ] >>444 ああ、やっぱそうなのか。 じゃあ不満持ってもしかたないか。
446 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 23:55:50 ] MinGWでいつもGCC4.xを自分でビルドして使ってる
447 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 13:59:35 ] mingwはlibiconvをインクルードしなくなったのと 3.4.5でwstringが未対応なので、野良の4.3.3使ってる。 まあ普通に動くよ。Dwarf2でVC近い速度が出るし。
448 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 03:00:54 ] Windows 7 64bit でboost群使える? 色々テストしてみたいんだけど
449 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 03:36:54 ] コンパイラさえ動けば問題ないだろ。
450 名前:デフォルトの名無しさん mailto:sage [2009/04/27(月) 16:43:09 ] 今までhoge.cppファイルの中でboost::bindを使っていたのだけれど、 今度そのhoge.cppにboost::lambdaも使うことにしようと思っている。 なお、このhoge.cpp以外でboost::bindおよびboost::lambdaは使用していない。 このような時は 1.boost::lambdaをただ追加する (=<boost/bind.hpp>と<boost/lambda/lambda.hpp>をインクルードする。) 2.boost::bindを使っている箇所も全てboost::lambdaに置き換える (=<boost/lambda/lambda.hpp>だけインクルードする。) このどちらが良いのかい?
451 名前:デフォルトの名無しさん mailto:sage [2009/04/27(月) 16:59:24 ] boost::bindはグローバルに_1とか置く割と行儀が悪いライブラリだったりするんで俺なら2を選ぶ
452 名前:450 mailto:sage [2009/04/27(月) 17:05:52 ] >>451 > boost::bindはグローバルに_1とか置く割と行儀が悪いライブラリだったりするんで俺なら2を選ぶ そうだったんか。 そういえばboost:lambdaの_1とかとバッティングすることがあると聞いた気がするなぁ。 まあbindは古株だからかな?
453 名前:デフォルトの名無しさん mailto:sage [2009/04/27(月) 17:46:19 ] bindのところをlambdaにしたらそれだけでファイルサイズが60kbくらいあがったわ。 ・・・でもPC向けだしこのくらいいいかな、利便性を考えれば。
454 名前:デフォルトの名無しさん [2009/04/27(月) 23:09:28 ] 初心者ですがお願いします.以下のようなエラーが出て困っています。 boostのbind.hでerror C2825: 'F': '::' が後に続くときは、クラスまたは名前空間でなければなりません c:\includefiles\boost\bind.hppと出ます。 いかがその部分です template<class F> struct result_traits<unspecified, F> { typedef typename F::result_type type; }; 色々サイトで調べてみたのですが、#include <boost/bind.h>の前に #define BOOST_BIND_ENABLE_STDCALL #define BOOST_MEM_FN_ENABLE_STDCALLを書くと良いと記載されていたのですが、 エラーが取れません。原因がわかりませんでしょうか?
455 名前:デフォルトの名無しさん mailto:sage [2009/04/27(月) 23:27:35 ] >>454 result_traitsの後に<は書けなくね?
456 名前:デフォルトの名無しさん [2009/04/27(月) 23:50:15 ] >>455 さん ご返事ありがとうございます。 エラーの箇所を確認したのですが、bind.hの中からエラーを出力しているようです。 boostの中のバグということでしょうか?
457 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 00:10:18 ] >>456 エラーの発生する自分で書いた側のコードをupして。
458 名前:デフォルトの名無しさん [2009/04/28(火) 00:38:20 ] >>457 さん 確認したのですが bind.hppのエラーしか出力されていないようです。 ちなみにエラー箇所はbind.hppの68行目で template<class F> struct result_traits<unspecified, F> { typedef typename F::result_type type; }; から出力されておりエラー内容は error C2825: 'F': '::' が後に続くときは、クラスまたは名前空間でなければなりません c:\includefiles\boost\bind.hpp error C2039: 'result_type' : '`global namespace'' のメンバではありません。c:\includefiles\boost\bind.hpp error C2146: 構文エラー : ';' が、識別子 'type' の前に必要です。c:\includefiles\boost\bind.hpp error C2208: 'boost::_bi::type' : メンバのない列挙型、構造体、共用体が定義されました。c:\includefiles\boost\bind.hpp error C1903: 直前のエラーを修復できません。コンパイルを中止します。c:\includefiles\boost\bind.hpp error C2039: 'result_type' : '`global namespace'' のメンバではありません。c:\includefiles\boost\bind.hpp error C2208: 'boost::_bi::type' : メンバのない列挙型、構造体、共用体が定義されました。c:\includefiles\boost\bind.hpp と記述されています。お手数ですがアドバイスお願いいたします。
459 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 00:57:36 ] >>458 boost::bind()を呼ぶところの第3引数が間違っている可能性が高い。 だから>>457
460 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 00:59:54 ] >>459 第3は余計だった。なんでこんなこと書いたんだ とにかく引数の指定を間違えてる
461 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 01:38:35 ] >>458 最近のVisual C++なら、 「foo.cpp(7) : コンパイルされたクラスの テンプレート のインスタンス化 'HogeHoge' の参照を確認してください」 ってのがエラーメッセージの随所に挟まっている。 (IDEからビルドしているなら、エラー一覧ではなく出力ウィンドウのほうに) このメッセージだけを見ていくと、その中に必ず自分のソースコードを指しているものがあるはず。
462 名前:デフォルトの名無しさん [2009/04/28(火) 02:01:59 ] >>459 ,460,461 返事が遅くなってしまい申し訳ございませんでした。 ご親切なご回答ありがとうございます。 自分のソースを確認した所、 1>c:\includefiles\boost\bind.hpp(67) : error C2825: 'F': '::' が後に続くときは、クラスまたは名前空間でなければなりません 1> c:\includefiles\boost\bind\bind_template.hpp(15) : コンパイルされたクラスの テンプレート のインスタンス化 'boost::_bi::result_traits<R,F>' の参照を確認してください 1> with 1> [ 1> R=boost::_bi::unspecified, 1> F=void (__thiscall Servent::* )(const boost::system::error_code &,size_t) throw() 1> ] 1> c:\work_data\gg\src\network\servent.cpp(54) : コンパイルされたクラスの テンプレート のインスタンス化 'boost::_bi::bind_t<R,F,L>' の参照を確認してください 1> with 1> [ 1> R=boost::_bi::unspecified, 1> F=void (__thiscall Servent::* )(const boost::system::error_code &,size_t) throw(), 1> L=boost::_bi::list3<boost::_bi::value<Servent *>,boost::arg<1>,boost::arg<2>> 1> ]
463 名前:デフォルトの名無しさん [2009/04/28(火) 02:13:39 ] すみません、誤って書き込んでしまいました。上記のエラーメッセージが出力されています。 ソースとしては、 typedef typename result_traits<R, F>::type result_type; boost::bind(&Servent::read, this,boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); あと質問なのですが、boostのバージョンによる不具合の可能性はあるのでしょうか? 現在boostの1.35を使用して実行しております。 度々ご質問して申し訳ございません。
464 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 06:06:36 ] >>454 > 初心者ですが これいらない
465 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 14:21:59 ] ついにboostもcmakeか
466 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 14:50:26 ] >>463 コンパイルしてそのエラーの出る最低限のソースが必要。
467 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 01:27:44 ] VC++のバージョンは? 7.0以下だと該当コードは利用できず、別のコードに置換されるみたいだけど。
468 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 11:13:14 ] enable_ifの引数にboost::mplもつかえるんだね。boostってスゲエと思った。
469 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 19:11:05 ] >>468 ホントすげぇよBoost。 C++が大好きなんだろうなぁと思わせられるよね(笑) Boost.Lambda(functionも。)やBoost.Spirit、Boost.MPLあたりが変態級の名を冠するにふさわしいか。 利便性で言えばshared_ptrもヤヴァイけど。
470 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 22:49:38 ] preprocessorを忘れるとはけしからんな。
471 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 23:11:00 ] C++ code - 32 lines - codepad codepad.org/6fhFzzye このコードにて、エラーになる原因が分かりません。 私の考えでは boost::lambda::bind(func_i, boost::lambda::protect(boost::lambda::bind(my_name, boost::lambda::_1))) でconst char* constを受け取りintを返す関数が得られるので、 それをlambda_test_funcの引数として渡せるのではないかと思ったのですが。 どこを修正すればよろしいでしょうか?
472 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 23:17:13 ] >>471 lambda で生成される関数は、関数オブジェクトの一種。 関数へのポインタは C++ 言語上の「関数」を指すことができるけど、 言語上はクラスオブジェクトとなる関数オブジェクトを指すことはできない。 関数と関数オブジェクトを同等に扱うためのものとして boost::function がある。 - void lambda_test_func(int (*func_ptr)(const char* const char_ptr)) + void lambda_test_func(boost::function<int (const char*)> f)
473 名前:472 mailto:sage [2009/04/30(木) 23:38:58 ] >>471 あと、関数合成に boost::lambda::protect 要らない。 www.boost.org/doc/html/lambda/le_in_details.html#id3704796
474 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 02:59:05 ] UBLas使ってる人に聞きたいんだけど、固有値分解とかはどうやってるの? 検索するとCLapack使ってるのしかでないけど、みんな自前で書いてるの?
475 名前:471 mailto:sage [2009/05/01(金) 05:58:59 ] >>472 ありがとうございます。 学べました!
476 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 19:03:13 ] 更新しました。今週はSpiritに大きな変化がありました。 ttp://booster.x0.to/ 以下更新内容の一部 [Mpl] portability patch for sunpro on little-endian platforms [Regex] Added support for \g \K and \R. [Spirit] Merging Spirit V2.1 Spirit: Added missing files, deleted old files, cleaned up empty directories Spirit: Started to add repository of reusable Spirit components, added repository::karma::confix and some related tests Spirit: Fixed assertion in multi_pass iterator [Statechart] Updated VC project files to 1.39. Fixed a bug that prevented the use of boost::ref() with fifo_scheduler<>::create_processor<>, reported by Steve Hawkes. This should fix the non-standard code used in changeset 52616. [Signals2] Trying to fix compile problems on msvc 9 in release mode. [Serialization] Correct logic for enabling THROW_EXCEPTION Add support for std::bitset.hpp
477 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 19:10:05 ] >>476 ほほうspiritがV2になったのか
478 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 01:00:05 ] >96 の問題は直ったんだろうか
479 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 22:45:06 ] >>476 Signals2って何かな?と思って調べたらスレッドセーフのSignalらしい。これは欲しい。
480 名前:デフォルトの名無しさん mailto:sage [2009/05/03(日) 12:01:48 ] 1.39きたぁぁぁ
481 名前:デフォルトの名無しさん mailto:sage [2009/05/03(日) 13:32:00 ] >>480 Boostって結構こまめに更新した方が良いの? 俺のBoostは1.37なんだけど。。。
482 名前:デフォルトの名無しさん mailto:sage [2009/05/03(日) 13:50:15 ] >>481 最近一定期間ごとにリリースする方針に変えたらしいね。 更新内容を見て、興味のない更新ばかりだったら放置しても可だと思うけど。 特に最近は後方互換性を平気で破壊するような更新が多いから悩む。 exceptionとかexceptionとかexceptionとか。
483 名前:481 mailto:sage [2009/05/03(日) 13:57:14 ] >>482 ありがとう。exceptionって使ったこと無いなぁ。便利? その仕様変更はBoostだから出来ることか。 まあC++に正式に乗っちゃったら迂闊に仕様変更できないから 今のうちに満足行くまで更新して欲しい。
484 名前:481 mailto:sage [2009/05/03(日) 14:01:33 ] >>482 ホントだ、1.36以降、3ヶ月刻みになっているね。 Version 1.39.0 May 2nd, 2009 12:00 GMT Version 1.38.0 February 8th, 2009 12:00 GMT Version 1.37.0 November 3rd, 2008 12:00 GMT Version 1.36.0 August 14th, 2008 12:00 GMT Version 1.35.0 March 29th, 2008 12:00 GMT
485 名前:471 mailto:sage [2009/05/03(日) 14:36:17 ] >>472-473 ご教示の通り boost::lambda::protectを外した上で boost::function を利用したところ、 問題無くコンパイル通りました。 ありがとうございました。
486 名前:デフォルトの名無しさん mailto:sage [2009/05/03(日) 17:29:29 ] >>481 必要に応じてあげていけばいいと思うよ。 でもバージョン上げたら、コンパイルできなくなったりすることがあるから一気にバージョン上げるとつらいかも。
487 名前:471 mailto:sage [2009/05/03(日) 17:55:45 ] 普通の部分では以前ご教示いただけた通りで動きました。 今度はBoost.Spiritのセマンティックアクションにラムダ式を入れる時にまた困っております。 //以下はMyClass.hの中身 class MyClass { MyClass(); virtual ~MyClass()=0; public: static const int get_10(const char * const); }; //以下はMyClass.cppの中身 #include "MyClass.h" const int MyClass::get_10(const char * const) {return 10;} //mainは以下です。 C++ code - 112 lines - codepad codepad.org/K35wYWBz このソース中の質問箇所というコメントのところ ('/' >> fctr)[ boost::lambda::bind(func_geti_reti, boost::lambda::bind(MyClass::get_10, boost::lambda::_1) ) ] が問題点なのですが、
488 名前:471 mailto:sage [2009/05/03(日) 17:58:47 ] 前述のように @Boost.Spiritのセマンティックアクションに Aラムダのbindで関数を結合し BMyClass::get_10の部分ががクラスのstaticメンバ関数である この@〜Bの時に x_error.cpp:82: error: invalid initialization of non-const reference of type 'co nst int (&)(const char*)' from a temporary of type 'const int ()(const char*)' C:/BoostC++Libraries/boost/lambda/detail/bind_functions.hpp:256: error: in passi ng argument 1 of `const boost::lambda::lambda_functor<boost::lambda::lambda_func tor_base<boost::lambda::action<2, boost::lambda::function_action<2, boost::lambd a::detail::unspecified> >, typename boost::lambda::detail::bind_tuple_mapper<typ ename boost::lambda::detail::constify_non_funcs<T>::type, const Arg2, boost::tup les::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuple s::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples: :null_type, boost::tuples::null_type>::type> > boost::lambda::bind(const Arg1&, const Arg2&) [with Arg1 = const int ()(const char*), Arg2 = boost::lambda::place holder1_type]' というエラーが出てしまいます。 環境はg++です。
489 名前:471 mailto:sage [2009/05/03(日) 18:03:35 ] 先のソースは × MyClass::get_10(const char * const) ○ MyClass::get_10(const char * const, const char * const) × boost::lambda::bind(MyClass::get_10, boost::lambda::_1) ○ boost::lambda::bind(MyClass::get_10, boost::lambda::_1, boost::lambda::_2) とすべきでした。失礼致しました。 それでもなお x_error.cpp:81: error: invalid initialization of non-const reference of type 'co nst int (&)(const char*, const char*)' from a temporary of type 'const int ()(co nst char*, const char*)' というエラーが出てしまいます。 非constな参照でテンポラリな何物かを捉えているという旨のようですが、 どうすれば回避できるのか分かりません。 どうかお知恵をお貸しください。
490 名前:471 mailto:sage [2009/05/03(日) 18:31:34 ] boost::lambda::bind をboost::bindに書き換えたら問題無く動作しました。 個人的にはboost::bindライブラリとboost::lambdaライブラリを混在させるのは気持ち悪いので 出来ればboost::bindの箇所は無くして全てboost::lambda::bindにしたいのですが、 どうすれば良いでしょうか?
491 名前:デフォルトの名無しさん mailto:sage [2009/05/03(日) 20:36:47 ] 3行でまとめてくれ
492 名前:471 mailto:sage [2009/05/03(日) 21:01:43 ] >>491 SpiritのSemantic Actionにlambda::bindで関数を結合して渡すとエラーになりますが、boost::bindならOKです。lambda::bindでも大丈夫にする方法を教えていただけないでしょうか?
493 名前:デフォルトの名無しさん mailto:sage [2009/05/03(日) 21:17:04 ] 恐縮ですwww func_geti_retiの引数の&が余分じゃないか?
494 名前:471 mailto:sage [2009/05/03(日) 21:36:52 ] >>493 int func_geti_reti(const int& num) を int func_geti_reti(const int num) や int func_geti_reti(int num) にしてみましたが、 error: invalid initialization of non-const reference of type 'const int (&)(const char*)' from a temporary of type 'const int ()(const char*)' と言われます。 私の見解では 関数の戻り値などのテンポラリオブジェクト(この場合はint)を constな参照で束縛できるというC++の仕様がありますから、 このあたりが問題な訳ではなさそうだと思っております。
495 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 20:23:45 ] letsboost::operators ttp://www.kmonos.net/alang/boost/classes/operators.html ここで紹介されているoperatorsって、いちいち定義が面倒なのを自動化してくれるらしいから 便利そうだと思っているんだが、使うと遅くなったりするのかい?
496 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 23:18:04 ] しない。 ただし、クラス/構造体のサイズを余計に増やしたくなければ、ちょっとだけ特殊な記法が必要。
497 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 23:52:23 ] >>496 ほう、そうなんか。そのちょっとだけ特殊な記法とはEBOに関連する?
498 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 00:17:24 ] en.wikipedia.org/wiki/EBO
499 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 00:21:31 ] >>498 EBOはEmpty Base Optimizationのつもりで書いた。 みんなに通じる略称かと思っていたが甘かったかな。
500 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 00:33:29 ] 意味は判るがその略称は初めて見たぞ。 ちなみにその直感は超正しい。 俺はDirect3Dを使ったソフトでベクトル型をboost::operatorから継承したせいで 半日謎のバグと戦う羽目になった。
501 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 01:05:17 ] OpenGLで同様な目にあった俺参上。
502 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 08:58:41 ] ふーん、なんかややこしいような気がしてきてしまった。 何はともあれ皆さんありがとう。
503 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 11:29:54 ] Effective C++の最新日本語訳本を読んだところ、 p202にEBOがEmpty Base Optimizationの略称で使われているのを発見した。 原著ではどうなっているのかな?
504 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 12:29:05 ] EBO とか ADL, CRTP, SFINAE, RAII あたりは普通に使ってる
505 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 12:42:43 ] あとはRVO、NRVOかな
506 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 12:47:20 ] RAIIぐらいはいいが、 あんまりにも乱発するのは感心しないぞ。
507 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 13:11:24 ] TSKに、RNPTはKNSNしないな
508 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 13:14:46 ] >>506 ADLやSFINAEはバグの原因になるから 勝手に使えるようになる。 CRTPやEBOはどうなんだろ。 趣味でやってると手を出したくなるけど。
509 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 13:41:36 ] >508 いや、略語乱発は感心しないという話では?
510 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 14:48:23 ] だれがどう感心しないんだw つうかそこいらの女子高生の略語に比べればカワイイもんだ
511 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 18:38:34 ] 1.39落としたけど、 ./booststrap.sh してできた project-config.jam の option.set libdir の行が PREFIX/lib じゃなくて /lib になるのは 何かやんごとなき事情でもあるの?
512 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 11:06:59 ] 1.39.0、またビルドの方法変わった? 1.38.0の時にやってた、 bjam --toolset=msvc-8.0 -sBZIP2_SOURCE=〜 -sZLIB_SOURCE=〜 --stagedir=. stage release debug link=static,shared runtime-link=static,shared でビルドしようとすると何か途中で止まるんだが…
513 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 11:22:31 ] VC8なら、runtime-link=staticは使わないだろ。外した方が良い。 あとシングルスレッドライブラリも使わないから、threading=multiも指定した方が良いな。
514 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 11:26:39 ] >>513 d おかげでビルド進みました。
515 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 11:36:46 ] まあ、それとビルドが進まないのとは別問題なんだけどな。 なんかmathがビルドできないな。 しかも、なぜか自分でファイルを消しておいて、そのファイルが見つからないからskipとかいうヘンなメッセージが。 もう一度試したらうまくいっているようだが。
516 名前:デフォルトの名無しさん [2009/05/07(木) 12:30:11 ] >>515 link=staticとruntime-link=staticがどうたらこうたらっていうエラーメッセージが出て止まってた。 やっぱりバッチファイル直接実行じゃなくてコマンドプロンプトから実行しないとダメだな…
517 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 20:35:09 ] 1.39でてたのか チェックしてくる
518 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 21:19:56 ] >>517 1.37->1.39にした俺はspiritの名前空間が変わってて驚いた。
519 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 22:52:30 ] 1.39のリリースノートによるとメモリリーク対策で導入すべきなのだが 再ビルドに時間がかかり面倒なので見なかったことにした
520 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 23:31:10 ] マルチコアなCPUを使うのは、今時のBoost使いなら当たり前。
521 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 23:40:39 ] ビルドが必要なライブラリって、なんかどうしても使う気になれないんだよねぇ。。。 みんな積極的に使ってる?
522 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 23:46:32 ] >>521 必要なら使う、当たり前のこと。
523 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 01:13:49 ] 使うにしてもregexとfilesystemとserializationくらいだなぁ
524 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 01:59:58 ] program_opt……いや、なんでもないんだ
525 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 07:46:02 ] >>524 もうちょっとシンプルなら使うのに…
526 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 09:16:23 ] あれはシンプルとかそれ以前に問題が多すぎる。 boost初期からあるってだけで、今新規に投稿しようとしたら満場一致で拒否られるレベル。
527 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 09:29:49 ] program_optionを普通に使ってて便利だと思ってる俺がおかしいのか。
528 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 11:37:47 ] あれunicodeのサポートが最悪だよ。
529 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 21:48:14 ] >>518 1.38でビルド時に警告が出てた。
530 名前:518 mailto:sage [2009/05/08(金) 22:40:53 ] >>529 結局ソースを見てたどっていって正しい名前空間を見つけたから大丈夫だったがね。
531 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 09:36:58 ] 上のほうの書き込み見て思ったが、1.39.0ではVS2005のランタイムライブラリに マルチスレッドデバッグ(/MTdオプション)やマルチスレッド(/MTオプション)を 指定している場合用のライブラリのビルドできなくなってるのかな?
532 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 09:55:48 ] そもそもMS自身が、もはやスタティックリンク版のCRTライブラリの使用を推奨してない。
533 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 11:30:32 ] ttp://booster.x0.to/ 確かにビルドの挙動が変わっていますね・・・。 少なくとも3週間以上、sharedライブラリがビルドされていない事に気付かないままアップロードしていましたので全て取り下げました。 申し訳ございません。 ところでお詫び代わりという訳でもありませんが、Windows+VC環境では導入が面倒なライブラリ群(bzip2,Expat,ICU,zlib 32/64bit)の ビルド済みパッケージを用意しました。(libs_for_build_boost.rar) 残りのMPICH2とPythonのインストーラを公式からダウンロードしてインストールすれば、32/64bitBoostのフルビルドが簡単に行える様になります。 それから、build.txtを改訂序にhow_to_build.txtに名称変更しました。 そういえば今週のsvnスナップショットは今夜辺りにでもビルドしてアップロードする予定ですが、64bit版svnスナップショットの需要はありますでしょうか。 32bit版と同梱にすると圧縮しても250MB程度まで膨れ上がる可能性がありますし、 ファイルを分けるにしてもサイト容量と作業時間を食いますので需要が無ければ今迄通り32bit版のみにします。 若しくは、1.39等のリリース版ソースを使った64bitビルドが欲しいといったリクエストでも構いません。こちらも一時の手間で済みますので楽です。 >>531 staticもsharedも、特に今迄と変わり無くビルド可能です。
534 名前:デフォルトの名無しさん [2009/05/09(土) 11:38:33 ] Signals と Signals2 との違いって、マルチスレッド対応だけ? シングルスレッドなプログラムなら、かえって Signals のままのほうが 排他制御なくて性能いいとかあるんかな。
535 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 12:38:51 ] >>534 ライブラリビルド不要とも書いてあったな。
536 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 15:34:23 ] >>534 dummy_mutexなんてもんもあるでな。
537 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 00:46:30 ] ↓ 更新しました。link=shared runtime-link=sharedでmpiとzlib絡みのエラーが発生して 計12ファイルが欠損しておりますが追々改善していきます。毎度人柱仕様で申し訳ございません。 ttp://booster.x0.to/ 以下更新内容の一部 [Spirit] Spirit.Support: Renamed policy namespace for iterators Spirit: fixed member initialization sequence Spirit: added some parenthesis' avoiding macro expansion of certain names [Archive] fix for error in handling compilers which don't handle has_new_operator [Config] Add __GXX_EXPERIMENTAL_CXX0X__ [Units] Allow specifing the default conversion using either base units or units. [wave] Update Wave to cope with some namespace reshuffling in Spirit Wave: Pending fix after namespace change in Spirit2 iterators [Type_traits] new test of empty aligned_storage [mpi] Fixes for bugs 2586 and 2594 ↓ [Regex] Add support for named sub-expressions. [Utility] eliminate noisy warning on msvc, fixes #2993 それと>>531 の件ですが、確かにmt-s,mt-sgdがビルド出来なくなっていました。 ただ、bjamのオプションを弄ったりすると一部ビルドが出来たり ビルドログを取ってみるとエラーメッセージがおかしかったりとbjamの挙動が良く分かりませんのでこちらも検証していきます。
538 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 01:32:26 ] まだ軽くしか調べていませんが、どうもbjamか設定ファイルがバグっているみたいですね。 --build-type=completeやlink=static runtime-link=staticとすると何故か error: link=shared together with runtime-link=static is not allowed error: such property combination is either impossible error: or too dangerious to be of any use と表示されますが、--build-type=complete --with-mpiやlink=static runtime-link=static --with-mpi(--with-pythonでも可)とすると ビルドが通ります(但しmpiやpython関連ライブラリのみですが)。
539 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 07:39:46 ] そのエラーは正しいとしか思えない。 というのも、例えばVCの場合、CRTのライブラリには、いくつものバージョンがある。 それこそ、SPごとにバージョンが変わる。 CRTをスタティックリンクするが、Boostをダイナミックリンクするということは、 CRTのバージョンが異なる可能性があり、危険だと思う。 そしてそもそもCRTのスタティックリンク自体が、VCでは推奨されていない。 確か、Boostの連中の検証した所によると、スタティックリンクのCRTを使うと、 スレッド周りで、たとえ正しいコードを書いたとしても、メモリリークする場合があるらしいとかいうMLを、 どっかで見た気がする。
540 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 13:14:22 ] 私もエラーメッセージの意味するところ自体は正しいと思いますし、link=shared runtime-link=staticは 1.38以前からビルドは不可能でした。ただ、1.39のbjamビルドでは link=shared runtime-link=staticではなく link=static runtime-link=staticや--build-type=completeでも error: link=shared together with runtime-link=static is not allowed と表示されてしまい、 link=static runtime-link=static --with-python(or mpi)としたり --build-type=complete --with-python(or mpi)とすると ビルドが通ってしまう点がよく分かりません。 1.38と1.39のdebugビルド時のbjamの動作の違いは Boost 1.38 static static: libboost_...-vc90-mt-sgd-1_38.lib static shared: libboost_...-vc90-mt-gd-1_38.lib shared static: error: link=shared together with runtime-link=static is not allowed shared shared: boost_...-vc90-mt-gd-1_38.lib + boost_...-vc90-mt-gd-1_38.dll (続く)
541 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 13:15:30 ] (続き) Boost 1.39 static static: error: link=shared together with runtime-link=static is not allowed (--with-python(or mpi)時のみlibboost_...-vc90-mt-sgd-1_39.lib) static shared: libboost_...-vc90-mt-gd-1_39.lib shared static: error: link=shared together with runtime-link=static is not allowed shared shared: boost_...-vc90-mt-gd-1_39.lib + boost_...-vc90-mt-gd-1_39.dll です。そのCRTスタティックリンク非推奨の件でstatic staticが封印されたのかとも思いましたが、 CMakeでVC用のプロジェクトファイルを作成してビルドするとmt-s(release static static)やmt-sgd(debug static static)が作成されましたので、 --build-type=completeがエラー扱いになってしまう事と併せるとbjam(の設定ファイル)の不具合ではないかと考えています。 上記とはあまり関係ありませんが、libs_for_build_boost.rarをアップデートしました。ttp://booster.x0.to/ zlibに似た何かをzlibと勘違いしてビルドしてしまっておりましたので正しい物に差し替えました。申し訳ございません。 これで、ビルド不可能なBoostライブラリはboost_graph_parallelのlibとdllのみ(mpi絡みのエラー)となります。 boost_graph_parallelはログを見ると32bit版がリンクエラーなのに対して 64bit版ではコンパイルエラーで引っ掛かっているのでソースが怪しい気がしなくもないですが・・・。 只、readmeやhow_to_build.txt内のbjamビルドコマンドについては上記の件もあり私自身混乱気味ですので、参考程度にして下さい。
542 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 15:31:21 ] regex date_time program_option serialization thread filesystem (system) 要ビルドのライブラリで使うのはこれぐらいかなぁー
543 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 16:53:36 ] >>542 十分つかってるな。
544 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 17:14:49 ] むしろ使ってないのを挙げた方が早いなw
545 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 18:07:22 ] static-staticビルド不可の原因が半分掴めました。対症療法的なビルドは可能になりました。 svn rev.52330(April 11,2009)での\Jamrootの更新で、160行目周辺の if <link>shared in $(properties) && <runtime-link>static in $(properties) && ! ( <toolset>cw in $(properties) ) { return <build>no ; } が if <link>shared in $(properties) && <runtime-link>static in $(properties) && ! ( <toolset>cw in $(properties) ) { ECHO "error: link=static together with runtime=link is not allowed" ; ECHO "error: such property combination is either impossible " ; ECHO "error: or too dangerious to be of any use" ; EXIT ; } に変更されています。EXIT ;をreturn <build>no ;にすれば旧来通りの動作(上記エラーメッセージが2度表示されますが)になりstatic-staticがビルドされます。
546 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 18:08:02 ] 但し、RegexのICUサポートを有効にしている場合は Skipping build of: libs/regex/build/icucore <build>no in common properties ... と表示され、ビルドされたlibboost_regex-vc90-mt-sgd.libは EXIT ;をreturn ;(唯戻るだけ)にして上記Skippingメッセージが表示されない状態でビルドした同libとファイルサイズもMD5も一致しません。 ログ(return <build>no ;:ttp://booster.x0.to/test86bak.txt return ;:ttp://booster.x0.to/test86.txt)を見ると 作業フォルダこそ違え同じ様な動作をしている様に見えるのですが、return ;でビルドした方が僅かにファイルサイズが大きくなります。 しかしそもそもstatic-staticでは実行されない筈のルーチンが実行されたり エラーメッセージが2度表示されしまっている(エラー処理ルーチンを2度通っている)時点で何かがおかしいのですが、 今迄エラーメッセージを発せずICU絡みでしか実害が無い(と思われる)仕様でしたので問題が隠蔽されていた様です。 bjamとJamrootをそれぞれrev.38329(August 1,2007)とrev.38534(August 9,2007)迄戻してもstatic-staticがこのルーチンに引っ掛かっていましたので、 相当昔からのバグの様です。おかしいのは設定ファイルではなく恐らくbjamのソースの方でしょうか。 EXIT ;をreturn ;にしてエラーを完全に無かった事にしてしまうのが対症療法としては現状での最善と思われますが、 この場合、禁止されているshared-staticでも52回エラーメッセージを繰り返した後ビルドを始めてしまいますのでご注意下さい。
547 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 22:18:43 ] 回避方法乙。 早速使わせてもらいます。 ゲームの場合はstatic-staticじゃないとサポート面倒なんで…
548 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 23:24:58 ] Bおおst、buildすら困難になって来たのか
549 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 00:13:20 ] 俺BoostをLinuxで使うよ君だけど そのままBuid出来た事なんて一度もないよ いつもJamファイルと格闘する羽目になる Windowsはそうでもないのか、うらやましいのぅ
550 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 02:00:46 ] VCでCRTのスタティックリンクはもういい加減にやめた方がいいと思うがなぁ。 だいたい何で必要なんだ。 ランタイムのインストーラーの他に、 DLLをEXEと同梱することもライセンス的に認められているというのに。
551 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 11:07:34 ] >>549 ぜひ最後の make instal コマンドlを checkinstall に変えて で同時にできたdebパッケージを配布してほしい
552 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 17:34:47 ] >>550 DLLの検索に失敗して起動できなかったりすることがあるんだよな 調べるのも面倒だからスタティックリンクする side-by-sideとか意味わかんね
553 名前:デフォルトの名無しさん mailto:sate [2009/05/11(月) 21:51:08 ] >>474 亀レスだが boost-sandbox.cvs.sourceforge.net/viewvc/boost-sandbox/boost-sandbox/boost/numeric/bindings/lapack を使ってます。 ただ、ublas は LAPACK と要素の格納方法が違うので、 hermitian_matrix とかに対して heev が使えないとか、けっこう不便な所がある。
554 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 22:07:13 ] >>549 VCだといつも問題なくライブラリビルドできるね。
555 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 22:20:51 ] >>552 そういやそれなんで起こるんだろうな。 対処法があればいいんだが。
556 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 23:30:35 ] プライベート配置でちゃんとマニフェスト置いておいても失敗するなんて _BIND_TO_CURRENT_VCLIBS_VERSIONがらみくらいしか知らんがどうなんだろ そういやbooster.x0.to/ さんのビルドDLLは、埋め込みマニフェストのCRTバージョンが 9.0.21022.8になってるから、SP1のmsvcr90.dllを配置すると死ぬかもね
557 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 00:10:17 ] その心配は要らないはず。 SP1版ランタイムが存在する環境では、バージョンリダイレクトの指定によって、 マニフェストで無印版msvcr90.dllを指定したアプリでも、SP1版ランタイムが読み込まれる。 (たしか無印版CRTをプライベート配置している場合でも) 蛇足だけど、そのことを知ってから自分は _BIND_TO_CURRENT_VCLIBS_VERSION使うのやめた。
558 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 12:52:07 ] 戻り値をスマートポインタで返す時に、 scoped_ptrはコピーが禁止されてるから普段はshared_ptrを使ってるんだけど、 コピー禁止+暗黙の型変換でscoped_ptrにできるオブジェクトを作って それを返してやればいいんじゃね?ってことを思いついた。 今実行できる環境にないからアレだけど……
559 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 13:32:27 ] >>558 それは auto_ptr の仕事じゃないか?
560 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 14:39:24 ] >>559 Pythonのwith文やC#でusingを使うように ファクトリ関数の戻り値をスコープ管理したい時に、 生のポインタを返してscoped_ptrで包んでもいいんだけど、 忘れたら嫌なのでスマートポインタで返したい、というイメージ。 auto_ptrだとコピー可能だし、所有権がどうのとか考えるのがめんどくさい。 あくまで戻り値を返す瞬間、一回だけコピーできるようにしたい。
561 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 14:43:35 ] >>560 だからまさにそれauto_ptrだって。
562 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 15:41:56 ] const auto_ptr=getHogefuga(); みたいなかんじ?んなわけねえか?w
563 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 18:59:19 ] >>562 558, 560だけど、const auto_ptrが駄目な理由が分かんなくなってきた…… どこに問題があるか教えてくれるとありがたいんだけど
564 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 19:10:11 ] const auto_ptrでいいよ。 const auto_ptrはscoped_ptrのようなものだ。少し違うけど。
565 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 19:20:20 ] >>563 const じゃ破壊的代入できないだろ?constでないメンバ関数呼べないんだから そういうこと?
566 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 19:27:32 ] 早くunique_ptrがauto_ptr/scoped_ptrに取ってかわるときが来てほしい。
567 名前:558, 560 mailto:sage [2009/05/12(火) 19:27:43 ] ん、const auto_ptrを戻り値の型に指定しても右辺値がconstになるだけで constで受けることを強制できるわけじゃないのか。 受ける時に気をつけるんだったら別にscoped_ptrでもいいし、 なんだかなあって感じだ
568 名前:558, 560 mailto:sage [2009/05/12(火) 19:47:37 ] と、俺の提案にも穴があることを発見してしまった 暗黙の型変換演算子も一応関数なので、 scoped_ptr型を返す関数を定義してやんなきゃいけないが、 戻り値を返す時にコピーが発生するので無理だ。 ざんねん!! わたしの ぼうけんは これで おわってしまった!! C++0xのunique_ptrとかは右辺値参照とか使ってこれを回避してるのかな?
569 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 20:25:21 ] scoped_ptrにauto_ptrで初期化するコンストラクタがあるから、auto_ptrで返してscoped_ptrで受け取ればいいんじゃね? なぜかドキュメントに載ってないが
570 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 04:17:00 ] >>569 559 の時点でゴールが示されてるのに、なぜかたどり着けない 558 が哀れだ。
571 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 08:32:52 ] >>568 C++03 の unique_ptr 実装はなかなかうまい方法で右辺値から(のみ)の初期化を実現してる。 それを真似することで、所有権移動禁止だが右辺値初期化だけ可能な scoped_ptr を 作ることはできる…が、それはもはや scoped じゃないという気も
572 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 10:37:34 ] みんな意地悪だな。これでいいんだろ? std::auto_ptr<int> f(); boost::scoped_ptr<int> p(f()); >>571 「C++03 の unique_ptr 実装」って何? auto_ptr の間違い?
573 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 22:43:40 ] >>572 ggrks ttp://home.roadrunner.com/~hinnant/unique_ptr03.html
574 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 14:40:30 ] [Review Results] Range.Ex library accepted into boost groups.google.com/group/boost-list/browse_thread/thread/4edfc6bfb1548094?pli=1 いつのまにかAcceptされてたんだね。これでやっとRange-Base Algorithmsが大手を振って使える
575 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 21:40:39 ] Boost.Oven が誕生することはなかったか… そいや Egg ってなんで蹴られたんだっけ? ドキュメント?
576 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 22:42:56 ] >>574 Range-Base Algorithmsって何だい?
577 名前:576 mailto:sage [2009/05/14(木) 22:45:29 ] >>574 ちょっと見た感じ、Boostにふさわしい変態級の記法をしているように見えるのだが よく分からんのだ。
578 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 23:13:29 ] >>575 誰もレビューしてくれなかったんじゃなかったっけ? >>576 STLアルゴリズム、std::hoge(c.begin(), c.end(), foo)をboost::hoge(c, foo)と書けるようになるラッパ。 今までBoost Vaultにくすぶっていた部分。 >>576 hoge | foo | barのようなやつのことだな。それはレンジアダプタ。 同類のOvenスレより pc12.2ch.net/test/read.cgi/tech/1231080841/ > ようするに、| 演算子でパイプ(Unix的なあれ)を作ったC++テンプレートライブラリ。
579 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 00:21:57 ] Egg-Oven-Range か・・・なるほど
580 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 00:37:16 ] >>577 ModernのAndrei Alexandrescuのこれでも読むといい ttp://groups.google.com/group/comp.lang.c++.moderated/browse_thread/thread/9b74808d7d869060 今が旬だ
581 名前:デフォルトの名無しさん [2009/05/15(金) 19:49:24 ] 更新しました。今週は更新の殆どがSpiritとGraphでした。尚、svnは1.40に移行しました。 亦、今回からビルドログを添付する様に致しました。 ttp://booster.x0.to/ 以下更新内容の一部 [Spirit] Spirit: Fixing ADL problem in example karma/calc2_ast_vm.cpp Spirit: Boost.Endian will be used starting Boost V1.41 only Spirit: Fixed a problem in static lexer generator [Dynamic_bitset] Minor comment edit [Unorderwd] Cherrypick some unordered container changes from sandbox. Merge emplace support for sandbox - but without move support. [Graph_parallel] Fixed uninitialized variable warning [Regex] Add support for named and/or subexpressions with indexes > 99 in conditional format expressions. [Graph] Added boost:: qualifications to next, using patch from bug 3013, fixing #3013 Added a new labeled graph adaptor that maps vertices to user-defined key types. Added missing labeled graph file. [Pending] Added a specialization of retag_property_list that will correctly retag Added a metafunction to determine if a property is no_property. [Filesystem] Filesystem: fix #3008, improving namespace discipline to avoid naming conflicts with the C++0x std library. [Smart_ptr] Merged in smart_ptr changes from the sandbox/boost0x branch created for BoostCon '09. This adds move semantics to weak_ptr and intrusive_ptr. [Exeption] exception_ptr improvements, documentation update.
582 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 21:41:28 ] >>581 お疲れ様です!
583 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 21:42:54 ] class rational : less_than_comparable < rational<IntType>, equality_comparable < rational<IntType>, less_than_comparable2 < rational<IntType>, IntType, equality_comparable2 < rational<IntType>, IntType, addable < rational<IntType>, subtractable < rational<IntType>, multipliable < rational<IntType>, dividable < rational<IntType>, addable2 < rational<IntType>, IntType, subtractable2 < rational<IntType>, IntType, subtractable2_left < rational<IntType>, IntType, multipliable2 < rational<IntType>, IntType, dividable2 < rational<IntType>, IntType, dividable2_left < rational<IntType>, IntType, incrementable < rational<IntType>, decrementable < rational<IntType> > > > > > > > > > > > > > > > > ってrationalの定義にあるんだが、これは何?? もしかしてこうするとEmpty Base Optimizationが働くとか!?
584 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 21:49:22 ] >>583 Boost::operatorで自明な演算子定義を省略してるんだろ こうしとけば+=があれば+は勝手に実装される
585 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 21:57:53 ] ちなみに、継承のアクセサを省略(private継承)してるのでis-aの関係ではなく、 どちらかというとmixinに近いことになってる。
586 名前:583 mailto:sage [2009/05/16(土) 22:05:31 ] >>584 ああ、Boost.Operatorsライブラリはしってるんだけど、 このテンプレートにテンプレートを重ねる変態的記法に驚いたのだ。 で、「Empty Base Optimizationが働くとか!?」と思った。
587 名前:583 mailto:sage [2009/05/16(土) 22:06:53 ] つまり普通だったらprivateの多重継承を考えるじゃない。 それを使わず、テンプレートにテンプレートを食わせてるじゃん。
588 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 22:27:44 ] www.boost.org/doc/libs/1_39_0/libs/utility/operators.htm#chaining ドキュメントにかいてあるぞ
589 名前:583 mailto:sage [2009/05/16(土) 22:30:46 ] ありがとう。 やっぱEmpty Base Optimizationね。
590 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 22:39:29 ] これ使った場所でちょっと複雑な原因不明のエラーが起こったら デバッグできる自信ない・・・
591 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 22:50:33 ] 自作ライブラリの実装が boostの実装と微妙にかぶっちゃうところがあるんですけど それってライセンス違反になるんでしょうかね? spiritとかlambdaとかのアイディアの根幹に関わる部分じゃなく 全然一般的な実装なんですけど。 例えばユークリッドの互除法とか。
592 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 23:39:11 ] Boostからぱくった? はい→ライセンス見ろ。改変おk、ソースコードからクレジットを外すなとかその程度でライセンスはクリアだ。 いいえ→結果的に同じものでも別々に作れば違う著作物。それぞれに著作権がある。堂々としろ。
593 名前:591 mailto:sage [2009/05/16(土) 23:49:16 ] >>592 ありがとうございます。別にぱくったわけではなく、結果的に若干(気にしすぎなのかもしれませんが)似てしまいました。 あと、まだはっきりとライセンスを熟読したこと無いのですが Boost Software License - Version 1.0 - August 17th, 2003 Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the "Software") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following: The copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. これは短いですが、全文ですよね。 熟読してきます。
594 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 23:58:48 ] 相手の実装を知っていて、 自分も作ってみたら似てしまったというのなら、 GNUの中の人的にはアウトだな。 パクリ元がNDA結んだ仕事相手じゃなくてboostでよかったな。
595 名前:591 mailto:sage [2009/05/17(日) 00:00:26 ] 実装を流用する場合に関係がありそうな部分は 二段落目 The copyright notices in the 〜 ですね。 要するに ………………………… 1.流用対象のライブラリの著作権表記 2.Boost Software License の全文 流用して作ったソースコードを開示する場合、これらを全て記載すること。 ただし実行ファイルの形ならば無制限。 ………………………… ってことですね。 ありがとうございました。
596 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 00:27:29 ] 俺は今までバイナリでしか使ったこと無い(し、そもそも職場がboost原則禁止orz)から分からないんだが、 例えばBoost.Functionのあるソースを流用して自作ライブラリMy_Libを作り、 My_LibのソースコードをBSDライセンスで公開したい場合はどうすればいいってことになるの? 1.My_Libのソースコードに Boost.Functionの著作権表記と Boost Software Licenseの全文を記載する。 2.My_Libのソースコードに BSDライセンスの全文を記載する。 3.「2.」のBSDライセンスの文言にはBoost.Functionの著作権表記は関わらない。 かい?でもこれだとMy_Libを流用する第三者がMy_LibのBSDライセンスの通りに作ると Boost.Functionの著作権表記が引き継がれなくなっちゃうよね? だれか分かるお方、お知恵をお貸しくだされ
597 名前:596 mailto:sage [2009/05/17(日) 10:03:01 ] BSDライセンスの著作権表示の場所に Boost.Functionの著作権表示を一緒に表示させればいいのか。
598 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 21:43:14 ] 更新しました。 ttp://booster.x0.to/ 以下更新内容の一部 [Fusion] Fusion: added explicit disambiguation for fusion::at [Exeption] support for exception_ptr and nesting in boost::diagnostic_information [Dynamic_bitset] Merge dynamic bitset from release. [Lambda] Avoid using namespace std; to prevent ambiguity between boost and std components. Fixes #3025 [Algorithm] Qualify minmax with boost:: to avoid ambiguity with std::minmax. Fixes #3023 [Filesystem] Fix Filesystem #2925, copy_file atomiticity [Serialization] change number of bits from unsigned int to std::size_t [Spirit] Spirit: Added thread safety precaution [Regex] Qualify lower_bound with std:: to allow regex to work with Sun CC [Signals2] Added ability to create a shared_connection_block which is initially not blocking. [Graph] Added new Graphviz parser (recursive descent); does not support subgraphs in edges yet Fixing bug in labeled graph. [Mpl] Fixed a bogus preprocessor directive [Wave] Wave: fixed race condition 亦、libs_for_build_boost.rarもICUを4.2d04から4.2に更新しました。
599 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 11:29:42 ] exceptionってまだまだ付け足されるね 奥がふかいのかなあ
600 名前:デフォルトの名無しさん [2009/05/26(火) 18:16:28 ] ・VisualC++2008EE ・boost1.37.0のuBLAS www.page.sannet.ne.jp/d_takahashi/boost/ublas/index.html#SEC15 の連立方程式をとくサンプルプログラムをコピペして動かしたところ lu_factorize(A,pm); で、例外が投げられます。 lu.hppの153行目で引っかかっているようです。 #if BOOST_UBLAS_TYPE_CHECK swap_rows (pm, cm); BOOST_UBLAS_CHECK (singular != 0 || detail::expression_type_check (prod (triangular_adaptor<matrix_type, unit_lower> (m), triangular_adaptor<matrix_type, upper> (m)), cm), internal_logic ()); #endif なぜだかわかりますか?
601 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 18:34:11 ] ・VisualC++2008EE ・boost1.37.0のuBLAS で試してみたけど、コンパイル通ったよ。 []演算子に関してぶーたら言われたから初期化してる場所は書き換えたけど。
602 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 18:37:20 ] どう書き換えたのか教えてやれよwwww
603 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 18:44:13 ] A[0][0] = 1.0; とか並んでる場所を全部 A(0,0) = 1.0; みたいに書き換えただけなんだけど。 ちなみにublas使ったこと無いからこれが正しい書式なのかは知らない。 というか、こっちだとそこ書き換えないとまずコンパイルされなかったよ。
604 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 19:17:57 ] >>601-603 ご対応ありがとうございます。 >>603 の処置はやっております。 関係ないと思って省いてしまいました。 すみません。 確かに、空のプロジェクトで作り直したところ 今度は正常に動作しました。 問題のある方は、既存のコードに埋め込んだのですが なぜ、同じコードなのにこちらではNGなのか、まだわかっていません。 一応、FPまわりのコンパイルオプションも確認したのですが、同じでした。。 どうやら、cm(2,2)が双方で違う値を返しているみたいですが、なぞです。
605 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 04:38:09 ] 悩んだら、とりあえずプリプロセス
606 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 21:06:02 ] >>604 コンパイルオプションが同じでもFP変える行儀の悪いプログラム があるとチェックに失敗するらしい。 DirectXのCreateDeviceとかがそうなんだと。ググったら出てきた。
607 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 18:47:31 ] 更新しました。 ttp://booster.x0.to/ 以下更新内容の一部 [Spirit] Spirit: added tokenize_and_parse functions taking multiple attributes Spirit: added #pragma once to headers in include directory [Wave] Wave: Incorporated the changes from latest version of the flex_string class (fixes #2946) [Graph] Reduced graph sizes to decrease test run time; fixes #2308 Changed GraphML writer to escape strings; added test of this; fixes #2567 Added graph properties to adjacency_matrix; fixed constructors to match documentation; fixes #875 [Format] Fix order of initialization warning. Fixes #1699 [Type_traits] Test for: enum UIntEnum { value = UINT_MAX } is promoted to int [Lambda] Avoid ambiguities between boost::lambda::bind and std::bind with VC10. Fixes #3075 [Multi_index] fixed #3076 [Graph_parallel] Added "edges_are_sorted" to CSR test case [Signals2] Added a little test of a signal taking a reference argument. Use BOOST_NO_VARIADIC_TEMPLATES instead of BOOST_HAS_VARIADIC_TMPL, etc. [Proto] saner default evaluation behavior for member (object|function) pointers [Math] Added a couple of static assertions to prevent misuse. [Thread] Attempts to improve the boost::thread move semantics; separated tests to give clearer ID; incorporated patch to fix issue #2062 Changed thread_specific_ptr to use a map for faster lookup, and erase empty nodes
608 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 10:58:06 ] boost で、実行中のプログラムのパスを取得する手段は提供されていますか? Win32API で言う所の GetModuleFileName(NULL) ですけど、 OS を問わず使えるようなのがあればな、と。
609 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 11:12:43 ] ハードリンクがあるから_じゃね
610 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 12:07:14 ] int main(int, char *argv[]){ std::cout << argv[0] << std::endl; return 0; }
611 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 13:27:41 ] >>606 遅くなりすみません。 まさにそれでした!!ありがとうございます。 boostとDirectXでFP精度を合わせるようにして 対応します。
612 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 10:54:37 ] そういやboost::spiritって大幅な仕様変更あったの? spirit使ってるプログラムをビルドすると、 Warning: This header is deprecated. Please use: boost/spirit/include/〜 …というwarningがいっぱい出るんだ。 どこかに変更点まとめてるところないかな。
613 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 12:39:43 ] >>612 ちょっと前にv1からv2になったよ v2用のドキュメントがどっかにあったはず
614 名前:518 mailto:sage [2009/06/01(月) 20:57:05 ] >>612 #include <boost/spirit/core.hpp> が #include <boost/spirit/include/classic_core.hpp> みたいに変更になった。 ・・・ような記憶がある。 試してごらん。
615 名前:デフォルトの名無しさん [2009/06/02(火) 04:44:33 ] WindowsでJPGファイルを操作(表示と拡大縮小くらい)するプログラムを 書こうと思っているのですが、boost::gilを使うと簡単にかけますか?
616 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 05:02:35 ] boost::gilを使っても使わなくても簡単にかける
617 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 09:33:12 ] >>613-614 情報d 新しくなってたのね。
618 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 12:43:16 ] >>615 GDI+を使ったほうがいい
619 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 20:10:34 ] Boost.Seriaizationでのshared_ptrのシリアライズでCustom Deleterが 保存/復元されないようなんだが、これってどうにかならないだろうか。
620 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 23:34:25 ] 更新しました。 ttp://booster.x0.to/ 以下更新内容の一部 [Detail] detail/utf8_codecvt_facet.cpp: apply patch from ticket #2986 to quiet warnings when wchar_t is 16-bits. [Program_options] Qualify usage of 'exeception', now that boost also has such name [Signals2] Fixed bug in test. Fixing some reference-to-reference problems with some compilers. Added test for and fixed compile errors in signal::set_combiner() and combiner() methods. Refs #3125. [Random] Fix the distribution of uniform_int. [Property_map] Added shared_array_property_map [Graph] Changed new-style named parameter code for BGL to use shared_array_property_map, greatly simplifying interface Re-added the exterior property labeling framework under a different name [Date_time] Fixed a possible reading overflow in the var_string_to_int function. The std::tm instances are zero initialized before usage in to_tm functions. Related to #1859. [Spirit] build_tree now has less parameters and limit lines to 80 chars. Added a param to add() taking a rules object. Spirit: fixed problem in lexertl library [Expressive] prefer mpl::if_c over mpl::if_ for better compile times [Fusion] reduce number of template instantiations [Lambda] Add result_type to lambda::ret. Fixes #1222
621 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 02:18:21 ] spirit v2のドキュメントはもう少し増えないかなー
622 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 02:48:39 ] v1からv2にすると何か良いことあるん?
623 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 03:14:27 ] 着弾速度が音速を超えるので迎撃不可能になる
624 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 03:34:30 ] 結果、敵の侵攻を早めてしまう可能性もある
625 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 13:37:11 ] >623 フォン・ブラウン乙。
626 名前:デフォルトの名無しさん [2009/06/06(土) 23:56:41 ] ptr_vector の逆バージョンのようなコンテナない? ptr_vector は ptr_vector<A> v; v.push_back(new A()); A a = v.front(); こういう使い方ができるけど、 vector_ptr<A> v; v.push_back(A()); A* a = v.front(); こういう使い方をしたい。 内部構造としては std::vector と同じように連続的に持ってほしい。 無いと思ってコンテナ作成してるんだが、無いよな?
627 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 00:36:44 ] 無いだろうなぁ。 そういうのがつまりイテレータの仕事だし。 vector<A>::iterator i = v.begin();
628 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 00:45:46 ] A* a = &v[0]; だとまずいのか?
629 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 00:46:29 ] >>627 ありがと。自作するわ。 BOOST_FOREACH でイテレータ使えるようにならないかな。 BOOST_FOREACH ( std::vector<A>::iterator it, v ) { ... } こんなかんじで。
630 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 00:53:31 ] >>628 std::vector<A*> を使って実装したソースがあって、 あんまりコードを変えたくないんだ。 ・・・と思ったがそんなに手間じゃない気もしてきたw
631 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 00:54:26 ] >>629 BOOST_FOREACHを参照で受けるとかじゃだめなのか? イテレータじゃないとだめ?
632 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 00:55:53 ] イテレータでいいならrange_exのfor_eachにlambda渡せばいいんじゃね?
633 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 01:01:05 ] >>631 なんだかこれで解決できるような気がしてきた。 既存のコード読んでやってみる。 ありがと。
634 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 01:02:41 ] >>632 まだ lambda 使ったこと無いんだがそんなこともできるのか! 調べてくる
635 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 01:04:14 ] >>634 ごめん、勘違い
636 名前:デフォルトの名無しさん [2009/06/07(日) 14:45:37 ] atnd.org/events/702 124.45.27.25:12086/stream.mp3.m3u IRCNET #CRYBUTSU
637 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 17:35:00 ] ぶつぶつ会終わったよー
638 名前:デフォルトの名無しさん [2009/06/09(火) 12:38:54 ] 逆行列を求めようと、 ttp://www.page.sannet.ne.jp/d_takahashi/boost/ublas/index.html#SEC17 をコンパイルしたのですが、 以下のようなエラーが出ます。 test.cpp:33 は上記ページの lu_factorize(A,pm); になります。 /usr/include/boost/numeric/ublas/lu.hpp: In function ‘typename M::size_type boost::numeric::ublas::lu_factorize(M&, PM&) [with M = main()::dmatrix, PM = boost::numeric::ublas::permutation_matrix<unsigned int, boost::numeric::ublas::unbounded_array<unsigned int, std::allocator<unsigned int> > >]’: test.cpp:33: instantiated from here /usr/include/boost/numeric/ublas/lu.hpp:137: error: no matching function for call to ‘project(boost::numeric::ublas::matrix_column<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<unsigned int, int>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > > >&, boost::numeric::ublas::basic_range<unsigned int, int>)’ 何かboostの設定が間違っているのでしょうか?
639 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 14:31:59 ] gcc 3.4.6 + BOOST_VERSION 103700 >g++ test.cpp -Wall >ls a.out test.cpp >gcc --ver gcc (GCC) 3.4.6 以下略 >./a.out A = [3以下略 問題なし [別環境] gcc 4.1.2 + BOOST_VERSION 103301 >scp ほげほげ:./test/test.cpp . ほげほげ's password:(はげはげ) >ls test.cpp >g++ test.cpp /usr/include/以下略。同じエラー >gcc --ver gcc (GCC) 4.1.2 以下略 [さらに別環境] VC2008EE + BOOST_VERSION 103700 <memory>で警告食らったけどとりあえずコンパイル成功して動いた boostのバージョン依存の問題かもしれません。 ひょっとしてもしかしたら、gccのバージョン依存の問題かもしれません。
640 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 19:55:03 ] spiritの話題がちらほらでるけど、そんなに使う場面ってある? 簡単なものなら正規表現で十分だから、俺にとっては永遠に出番のなさそうなライブラリーなんだけどなぁー
641 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:13:25 ] >>640 ちょっと複雑な設定ファイルの文法を簡単に定義できるのが便利。 bison/flexといった外部ツールを使わずにC++ですべて完結するのが良い。
642 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:16:10 ] spiritの方が大抵速いようだしな。 それでいて柔軟性もあるし
643 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:34:08 ] spiritとか使ったことがないが、コンパイルにやたらと時間がかかりそうで怖いんだが。
644 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:38:28 ] コンパイルに時間が掛かるのはその通りだが、今時大した問題でも無いと思う。 まずは使ってみて便利さとコンパイル時間を天秤にかければ良いだろうな。
645 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:33:44 ] コンパイルするのにメモリもかなり食う まぁ一度コンパイルしてしまえば(文法規則が変わらない限り)関係ない話だし
646 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:36:27 ] >>640 >>643 Boost.Spiritは、ぜひとも一度使ってみて、 Boost.Lambdaと同様のあまりの変態さにおののいてみてください。 すげーよまじで。
647 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:21:08 ] yacc と比較して spirit の構文解析の速度はどうですか? spirit で何度か C 風文法を解析するプログラムを作ったのですが パース時に後戻りが多いような気がするのですが。
648 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 03:36:23 ] >>647 実際に同じ文法を定義してベンチマーク取ったわけではないけど、spiritは 再帰下降パーサだからバックトラックが遅いんだろうな。 効率が気になる程に長いファイルをパースするなら、やっぱりLALRパーサの bison(yacc)を使った方が良いと思う。
649 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 09:00:32 ] v2の方はコンパイルでアホのようにメモリ喰うな ちょっとした文法でも1GB普通に超える
650 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 19:34:55 ] 更新しました。bjamでのビルドに於いて、"--build_all"オプションが削除されました。 ttp://booster.x0.to/ 以下更新内容の一部 [Graph] Reverted old version of CSR graph for compatibility, with a #define to switch between the modes; cleaned up interface of new CSR graph; fixed tests and docs accordingly Changed to shared_array_property_map Sped up out_degree() and related functions for new interface [Python] Allow duplicate enum values. Fixes #2744 [Example] examples of external main usage typo [Regex] Simplify and fix PP logic. [Impl,Exeption,Mpl,Detail,Smart_ptr] avoid C style casts [Numeric] Fix a couple of typos in the ublas documentation. Fixes #3056, #3057. [Variant] Support BOOST_NO_TYPEID and BOOST_NO_IOSTREAM in Boost.Variant. Fixes #3051. [Spirit] Spirit: added placeholders for lexer semantic actions Spirit: Lot of work done in Lexer, fixed bugs, added support functions, refactored code [Proto] virtual_members get proto_arity_c [Serialization] Update include from boost/pfto.hpp to boost/serialization/pfto.hpp. Refs #3062. [Signals2] Added a copy of Thorsten Ottosen's auto_buffer into signals2/detail and used it to replace stack_allocator/stack_vector (which worked on popular compilers but were not strictly standards conforming).
651 名前:デフォルトの名無しさん [2009/06/12(金) 20:02:43 ] foreach ( int a, boost::assign::list_of ( 1 ) ( 2 ) ( 3 ) ) { ... } でコンパイルエラーが出るんだが、こういうのは無理? e:\boost\boost\assign\list_of.hpp(163) : error C2661: 'boost::foreach_detail_::rvalue_probe<T>::rvalue_probe' : 2 個の引数を伴うオーバーロードされた関数はありません。
652 名前:デフォルトの名無しさん [2009/06/12(金) 21:05:22 ] boost::flyweight<std::string, boost::flyweights::set_factory<std::less<boost::mpl::_2> > > fw1("1"); std::cout << &fw1.get() << "\n"; boost::flyweight<std::string, boost::flyweights::set_factory<std::less<std::string> > > fw2("1"); std::cout << &fw2.get() << "\n" 以下の4つソースは全て同じ結果になることを期待していたのですが、同じ結果になりません。 (1) boost::flyweight<std::string> fw1("1"); std::cout << &fw1.get() << "\n"; (2) boost::flyweight<std::string, boost::flyweights::hashed_factory<> > fw2("1"); std::cout << &fw2.get() << "\n"; (3) boost::flyweight<std::string, boost::flyweights::hashed_factory<boost::hash<boost::mpl::_2>, std::equal_to<boost::mpl::_2> > > fw3("1"); std::cout << &fw3.get() << "\n"; (4) boost::flyweight<std::string, boost::flyweights::hashed_factory<boost::hash<std::string>, std::equal_to<std::string> > > fw4("1"); std::cout << &fw4.get() << "\n"; (1)と(2)は同じ結果になりますが、(3)と(4)が(1)や(2)と同じ結果にならないのは、どうしてでしょうか? (1)と(2)に関してここにも書いてるので、当然な結果・・・ www.boost.org/doc/libs/1_38_0/libs/flyweight/doc/tutorial/configuration.html#hashed_factory
653 名前:652 [2009/06/12(金) 21:06:41 ] 余計なソースまで貼ってしまったので、再度投稿します。 以下の4つソースは全て同じ結果になることを期待していたのですが、同じ結果になりません。 (1) boost::flyweight<std::string> fw1("1"); std::cout << &fw1.get() << "\n"; (2) boost::flyweight<std::string, boost::flyweights::hashed_factory<> > fw2("1"); std::cout << &fw2.get() << "\n"; (3) boost::flyweight<std::string, boost::flyweights::hashed_factory<boost::hash<boost::mpl::_2>, std::equal_to<boost::mpl::_2> > > fw3("1"); std::cout << &fw3.get() << "\n"; (4) boost::flyweight<std::string, boost::flyweights::hashed_factory<boost::hash<std::string>, std::equal_to<std::string> > > fw4("1"); std::cout << &fw4.get() << "\n"; (1)と(2)は同じ結果になりますが、(3)と(4)が(1)や(2)と同じ結果にならないのは、どうしてでしょうか? (1)と(2)に関してここにも書いてるので、当然な結果・・・ www.boost.org/doc/libs/1_38_0/libs/flyweight/doc/tutorial/configuration.html#hashed_factory
654 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 13:13:18 ] boost::typeクラステンプレートって何に使うの? 適当な引数として boost::type<t>* = 0 のように使っているようだが、意図がよく分からん。
655 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 15:17:09 ] >>654 C++は関数テンプレートの部分的特殊化ができないが、オーバーロードを使って同じような事ができる。 boost::type<Hoge>とかboost::type<Fuga>とか引数を変えてオーバーロードし、 Function(x, boost::type<Hoge>());みたいな感じで呼び出す。 boost::type<Hoge>はコンパイラの最適化で消えるため、実行時のコスト0で実現できる。
656 名前:654 mailto:sage [2009/06/14(日) 16:06:02 ] >>655 ふーむ。。。 template <typename TIPE> void Function(int x){〜}; とでも定義しておいて Function<TYPE>(x); と呼び出すんじゃだめなのかい?
657 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 18:02:25 ] >>656 >>655 はこういうことだと思う template<class T> void f(T, ...) { std::cout << "T"; } template<class T> void f(T*, boost::type<T>) { std::cout << "T*"; } int main() { double d = 0; int i = 0; f(d); f(&i, boost::type<int>()); f(&d, boost::type<double>()); }
658 名前:656 mailto:sage [2009/06/14(日) 21:10:20 ] >>657 悩んだ末、何となく意味が分かった気がする。 部分特殊化で template<class TYPE *> void f<TYPE *>(TYPE *, ...) としたくても出来ないから、 普通の型用とポインタ型用の2つを多重定義するオーバーロードで 似たようなことをしている訳か。 二人ともありがとう!
659 名前:655 mailto:sage [2009/06/14(日) 22:31:03 ] >>656-658 言いたかったのは、 Modern C++ Design 30ページより > ・クラス・テンプレートのメンバ関数については完全な特殊化ができるものの、メンバ関数の部分的な特殊化はできません。 > ・ネームスペース・レベルにおける関数(非メンバ関数)の部分的な特殊化はできません。 > ネームスペースレベルにおけるテンプレート関数に対して許されている機能のうち、部分的な特殊化に最も近いものはオーバーロードです。 > つまり実用上は、関数パラメータに対してのみ(戻り値や内部的に使用される型は適用できません)細かい粒度の特殊化能力を与えることができるわけです。例えば: > template <class T, class U> T Fun(U obj);// 一次テンプレート > template <class U> void Fun<void, U>(U obj);// 部分的な特殊化(不正) > template <class T> T Fun(Windows obj);// オーバーロード(正当) そして template <class T> void Function(T x, Hoge/*ダミー*/); ではなく template <class T> void Function(T x, boost::type<Hoge>/*ダミー*/); とすることによって実行速度に影響を与えずオーバーロードを解決できる(boost::type<T>のサイズが0のため)。
660 名前:655 mailto:sage [2009/06/14(日) 22:33:31 ] オーバーロードというのは template <class T> void Function(T x, boost::type<Hoge>/*ダミー*/); template <class T> void Function(T x, boost::type<Fuga>/*ダミー*/); っていうこと。
661 名前:658 mailto:sage [2009/06/15(月) 07:05:57 ] >>659 ふーん、なるほど。 Boostでやたら多用されているのも分かる気がしてきた。
662 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 21:47:30 ] 素朴な疑問です。 shared_ptrやscoped_ptrには下記のオペレータがあります。 T& operator*() const; T* operator->() const; 実装から考えれば全くその通りだと思います。 でも生ポインタを抽象化するという役割を考えると、 下記の方が理にかなっているように思えてなりません。 const T& operator*() const; const T* operator->() const; T& operator*(); T* operator->(); 後者がNGで、前者でなければならない理由とかがあるのでしょうか?
663 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 21:50:02 ] T const* と T* const の違いを考えてみればいい。
664 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 22:15:29 ] >>663 なるほど! 確かにポインタ自身のconstを考えると納得です。 すっきりしました。 ありがとうございました。
665 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 15:07:43 ] 継続はいつ実装されるんだ
666 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 22:21:29 ] 更新しました。 ttp://booster.x0.to/ 以下更新内容の一部 [Graph] Changed function types to enums and removed include of iostream; refs #3134 Added constructors from multi-pass unsorted, filtered edge lists; refs #3134 Added extra named parameters for McGregor maximal common subgraph algorithm; contributed by Michael Hansen; refs #3134 [Functional] Try to avoid float to int warning when a float function doesn't exist. Refs #3171. [Spirit] Spirit: Added operator safe_bool to lexer token type Spirit: Simplified multi_pass iterator Spirit: Fixing bogus assertions Fixup to add() again for Hartmut. Spirit: Made dummy token constructor explicit [Random] Supress warnings from narrowing conversions. [Fusion] introduces unfused adapter fix trac issue #1608 [Proto] accomodate fusion:vector0 interface change [Graph_parallel] Fixed bugs in test case; refs #3134 Fixed warnings; refs #3134 [Python] Use appropriate default values for global and local dicts. [Impl] Fixed support for CRT hooks, it was not working properly with catch_system_errors=no
667 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 22:38:49 ] これは乙じゃなくてなんたらかんたら
668 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 05:07:54 ] program optionsライブラリって機能の割にはコンパイルしてlib用意しなきゃダメなんだね OSに依存することやってるわけでもなさそうなのに何故なんだぜ?
669 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 10:26:24 ] コンパイラに依存することやってたと思った
670 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 19:08:43 ] >>668 テンプレートやインライン関数でないものを含んでいるんじゃないの
671 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 20:44:52 ] program_optionsのファイル読み込みはいらないよなぁ シリアライズの方が手っ取り早いし、ちゃんとやるならspirit使うし
672 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 21:53:00 ] program_optionsはBoostに含まれるにしては割と 出来が良くない気がする。 まあライセンスが緩いBoostだから、いっぱいあるのは俺は歓迎だけどさ。
673 名前:progress_display mailto:sage [2009/06/27(土) 22:16:05 ] 俺もそう思う
674 名前:program_options mailto:sage [2009/06/27(土) 22:36:10 ] >>673 お前にだけは言われたくない
675 名前:672 mailto:sage [2009/06/27(土) 22:38:28 ] >>674 まあまあ。 喧嘩うるなよ。
676 名前: ◆/91kCCQXBo mailto:sage [2009/06/28(日) 01:39:40 ] >>113 ソートのアルゴリズムは習ってないということで。 #include <stdio.h> #include <stdlib.h> struct seiseki { char name[20]; int order[6]; } seito[] = {{"太郎",80,90,75,70,70}, {"次郎",70,85,80,80,85}, {"三郎",75,95,65,90,95}, {"四郎",65,70,80,75,80}, {"春子",90,100,85,90,85},{"夏子",100,95,80,85,80}, {"秋子",60,75,90,70,85}, {"冬子",85,80,85,90,95}}; int kamoku; int cmp(const struct seiseki *a, const struct seiseki *b) { int t = a->order[kamoku] - b->order[kamoku]; return (t==0)?0:(t>0?1:-1); } int main() { int i, array_size = sizeof(seito)/sizeof(*seito); char s_kamoku[6][10] = {"国語","算数","理科","社会","英語","合計"}; for(i=0; i<array_size; i++) { seito[i].order[5] = seito[i].order[0] + seito[i].order[1] + seito[i].order[2] + seito[i].order[3] + seito[i].order[4]; printf("%s,%3d,%3d,%3d,%3d,%3d,%4d\n", seito[i].name, seito[i].order[0], seito[i].order[1], seito[i].order[2], seito[i].order[3], seito[i].order[4], seito[i].order[5]); } for(kamoku=5; kamoku>=0; kamoku--) { printf("\n%sの点数で並び替え\n", s_kamoku[kamoku]); qsort(seito, array_size, sizeof(*seito), (int (*)(const void*, const void*))cmp ); for(i=0; i<array_size; i++) { printf("%s,%3d,%3d,%3d,%3d,%3d,%4d\n", seito[i].name, seito[i].order[0], seito[i].order[1], seito[i].order[2], seito[i].order[3], seito[i].order[4], seito[i].order[5]); } } return 0; }
677 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 01:42:34 ] 宿題スレの誤爆?
678 名前:shared_ptr mailto:sage [2009/06/28(日) 08:25:16 ] includeするだけで使えるってのがウリの一部だというのに・・ 本当使えないなモマイラは
679 名前:mpl mailto:sage [2009/06/28(日) 11:56:22 ] >>678 あんなクソでかいライブラリをコンパイルするのなんて待ってられないよなw
680 名前:spirit mailto:sage [2009/06/28(日) 15:46:58 ] 同意
681 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 16:10:57 ] おまいらおもろいなw
682 名前:noncopyable mailto:sage [2009/06/28(日) 17:27:03 ] >>678 >>679 >>680 おまえら、俺様の前に跪けよな。
683 名前:xpressive mailto:sage [2009/06/28(日) 20:32:19 ] regexはいらない子
684 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 20:38:01 ] regexの方がコンパイル速度速いだろ?
685 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 20:41:15 ] >>684 俺は 「Boost.Regexは動的正規表現だから、 ユーザーに正規表現文字列を入力してもらって 動的な検索を提供できるのでは」 と思っているのだが。 そんな機会が無くて試したこと無いけど。 Boost.Xpressiveもいる子
686 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 20:51:01 ] xpressiveにも動的正規表現処理はあるんだよ。
687 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 20:54:31 ] >>686 マジか! じゃあもうBoost.Regexは… …いや、なんでもない。
688 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 21:04:41 ] 残念ながらC++0xに採用されるのはboost::regexなのだよ。
689 名前:parameter mailto:sage [2009/06/28(日) 21:17:07 ] お前らあまりprogram_optionsいじめるなよ
690 名前:boost::tuple mailto:sage [2009/06/28(日) 21:28:29 ] tr1にも入ってるし、僕はいる子ですよね!
691 名前:687 mailto:sage [2009/06/28(日) 21:29:53 ] tr1に入るのがBoost.Regexなのは、 歴史的な理由? つまりある程度枯れているから信頼性があるとか?