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/
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 氏が実験してたな