[過去ログ]
Boostを語れゴラァ part4 (1001レス)
Boostを語れゴラァ part4 http://echo.5ch.net/test/read.cgi/tech/1175663346/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
874: デフォルトの名無しさん [sage] 2007/10/07(日) 22:00:35 諦めたらそこで試合終了だy・・・VC6か・・・諦めたら? http://echo.5ch.net/test/read.cgi/tech/1175663346/874
875: デフォルトの名無しさん [sage] 2007/10/07(日) 22:01:05 vc2005EE + WTL で無料でwinアプリ作れちゃうよ http://echo.5ch.net/test/read.cgi/tech/1175663346/875
876: デフォルトの名無しさん [sage] 2007/10/07(日) 22:03:32 微笑ましいなw http://echo.5ch.net/test/read.cgi/tech/1175663346/876
877: 868 [sage] 2007/10/07(日) 22:06:33 とりあえずstlportを入れてみました。 これで何とかなりますか? http://echo.5ch.net/test/read.cgi/tech/1175663346/877
878: 868 [] 2007/10/08(月) 00:14:19 何かもう駄目っぽい気がしたので、とりあえずcomplexは保留します。 (できれば知りたいですが) 実数行列だけ考えることにして、ためしに http://www.page.sannet.ne.jp/d_takahashi/boost/ublas/index.html#SEC4 ↑ここにある 連立方程式を解く の例にあるコードを、そのままコピーして ビルドしようとしましたが \boost_1_32_0\boost\numeric\ublas\lu.hpp(131) : error C2780: 'const class boost::numeric::ublas::matrix_indirect<M,class boost::numeric::ublas::indirect_array<A> > __cdecl boost::n umeric::ublas::project(const class boost::numeric::ublas::matri x_indirect<M,class boost::numeric::ublas::indirect_array<A> > &,const class boost::numeric::ublas::indirect_array<A> &,const cl ass boost::numeric::ublas::indirect_array<A> &)' : 3 引数が必要で す - 2 が設定されます。 ↑こんな感じのエラーが大量に発生してやばいです。 よろしければ、この解決策を教えていただけないでしょうか。 http://echo.5ch.net/test/read.cgi/tech/1175663346/878
879: デフォルトの名無しさん [sage] 2007/10/08(月) 00:18:45 VC2005を入れろ http://echo.5ch.net/test/read.cgi/tech/1175663346/879
880: デフォルトの名無しさん [sage] 2007/10/08(月) 01:25:39 素直にVS2005のEEでも、入れろよ。 みたところATLやMFCが必要だとは思えんし。 http://echo.5ch.net/test/read.cgi/tech/1175663346/880
881: 868 [] 2007/10/08(月) 03:41:01 VC2005入れたらエラーも発生せずできました。 3時間くらい悩んだりしていた甲斐があったと思います。 これは行列の固有値計算もできるんですか? http://echo.5ch.net/test/read.cgi/tech/1175663346/881
882: 868 [sage] 2007/10/08(月) 03:56:05 アッー! matrix<complex<double>> もできた。 さっきはできなかったのに なんかもう、色々許せない。VC6は許せない。 http://echo.5ch.net/test/read.cgi/tech/1175663346/882
883: デフォルトの名無しさん [sage] 2007/10/08(月) 04:01:14 >>869-874 を噛みしめておけw http://echo.5ch.net/test/read.cgi/tech/1175663346/883
884: デフォルトの名無しさん [sage] 2007/10/08(月) 10:16:03 boost::regexでsmatch 使うとそれ以降でインテリセンスが死んじゃうみたいなんだけど 回避策ありませんか? VC2005EEです http://echo.5ch.net/test/read.cgi/tech/1175663346/884
885: デフォルトの名無しさん [sage] 2007/10/08(月) 10:40:24 インテリセンスは死ぬためにあるのです http://echo.5ch.net/test/read.cgi/tech/1175663346/885
886: デフォルトの名無しさん [sage] 2007/10/08(月) 10:47:41 boostとインテリセンスは千日戦争に突入しているので、見守ってあげてください http://echo.5ch.net/test/read.cgi/tech/1175663346/886
887: デフォルトの名無しさん [sage] 2007/10/08(月) 10:50:54 インテリセンスで不具合がおきている人は日本語版VisualStudio使っているのかな? http://echo.5ch.net/test/read.cgi/tech/1175663346/887
888: デフォルトの名無しさん [] 2007/10/08(月) 11:15:56 >>887 お、そこには思いが至らなかった。 英語版の Visual Studio 2005 では死なないのかな? でも boost の ml などを見てると結構死んでる人もいるみたい。 >>884 なんか typedef が多重にかかると追い切れないのかもね。 boost/regex/v4/match_results.hpp の 49 行あたりにある typedef typename vector_type::const_iterator const_iterator; を vector_type を使わずに生のまま書くと IntelliSense は死なないみたい。 typedef typename std::vector<sub_match<BidiIterator>, Allocator>::const_iterator const_iterator; ところで、こういう宣言文での typename って必須? IntelliSense を殺してしまうようなヘッダファイルは Boost の そこかしこにあるんだけど、自分で使うヘッダファイルについては すべて修正してます。filesystem, mpl, optional, regex あたりが その代表かなぁ。 http://echo.5ch.net/test/read.cgi/tech/1175663346/888
889: デフォルトの名無しさん [sage] 2007/10/08(月) 11:26:14 >vector_type を使わずに生のまま なんのこと?生? >ところで、こういう宣言文での typename って必須? 必須 http://echo.5ch.net/test/read.cgi/tech/1175663346/889
890: デフォルトの名無しさん [sage] 2007/10/08(月) 11:29:14 英語版VisualStudioだと問題ないなあ。問題といっている ヘッダファイル使っているんだけどね。 http://echo.5ch.net/test/read.cgi/tech/1175663346/890
891: デフォルトの名無しさん [sage] 2007/10/08(月) 11:39:10 >>888 どうもです 書き直してみたけどやっぱり駄目みたい 便利な物は失うと辛いな(´Д`;) http://echo.5ch.net/test/read.cgi/tech/1175663346/891
892: デフォルトの名無しさん [] 2007/10/08(月) 11:42:25 >>889 「生」ってのは、その直前に typedef std::vector<sub_match<BidiIterator>, Allocator> vector_type; っていう宣言文があって、そこで宣言した vector_type を使わずに、 っていう意味で使った。 typename が必要になるのってどういうケースなんだろう。 じつは typename よくわかってない。テンプレート引数に class って書いてたのが最近は typename って書くのが流行り? って程度の認識。 http://echo.5ch.net/test/read.cgi/tech/1175663346/892
893: デフォルトの名無しさん [sage] 2007/10/08(月) 11:43:52 >>891 え?だめ?おかしいなぁ。 Visual Studio 2005 Professional SP1 日本語版 boost 1.34.1 なんだけどなぁ。 http://echo.5ch.net/test/read.cgi/tech/1175663346/893
894: デフォルトの名無しさん [sage] 2007/10/08(月) 11:51:46 >>892 std::vector<sub_match<BidiIterator>, Allocator>::const_iterator ってあったら、これが型なのかそうじゃない(例えばstaticメンバ変数)のかコンパイラには分からん だからtypenameで明示しない限り型じゃないとみなすことになってる http://echo.5ch.net/test/read.cgi/tech/1175663346/894
895: デフォルトの名無しさん [sage] 2007/10/08(月) 12:00:09 >>894 なるほど、クラスメンバと混同するからか。 typedef std::vector<sub_match<BidiIterator>, Allocator> vector_type; それでこの場合には typename がなかったのか。 http://echo.5ch.net/test/read.cgi/tech/1175663346/895
896: デフォルトの名無しさん [sage] 2007/10/08(月) 12:03:44 >>891 ncb ファイルを一度削除しないとだめかもね。 Visual Studio が起動している間に削除してもだめだよ。 ちゃんと終了してから削除しないと。 http://echo.5ch.net/test/read.cgi/tech/1175663346/896
897: デフォルトの名無しさん [sage] 2007/10/08(月) 12:37:17 試しにvector_typeを全部「生」にしてみたけど駄目だった やり方がどこか違うのかな・・・ 残念 http://echo.5ch.net/test/read.cgi/tech/1175663346/897
898: デフォルトの名無しさん [sage] 2007/10/08(月) 16:46:59 2005だが、 インテリセンスが混乱したら キャッシュ(ncbファイルだっけ)を削除したら一時的に直る。 http://echo.5ch.net/test/read.cgi/tech/1175663346/898
899: デフォルトの名無しさん [sage] 2007/10/09(火) 00:08:10 >>896>>898 ありがとうございます 遅レスですがncb消しても駄目ですた もう駄目ぽ http://echo.5ch.net/test/read.cgi/tech/1175663346/899
900: デフォルトの名無しさん [sage] 2007/10/09(火) 02:46:42 基本的にboost使う奴が悪いんだから、このさいインテリセンスは諦めましょう。 http://echo.5ch.net/test/read.cgi/tech/1175663346/900
901: デフォルトの名無しさん [sage] 2007/10/09(火) 03:07:14 特定のライブラリのみビルドする方法は用意されているのでしょうか? http://echo.5ch.net/test/read.cgi/tech/1175663346/901
902: デフォルトの名無しさん [sage] 2007/10/09(火) 03:34:13 >>901 どーだろ。でも、ライブラリ別に.soとか.aができるから、必要な奴だけリンクすることは可能。 だから部分ビルドできるかはあまり関係ない気もするんだが。 http://echo.5ch.net/test/read.cgi/tech/1175663346/902
903: デフォルトの名無しさん [sage] 2007/10/09(火) 04:30:10 ところで C++0x ではクロージャの機能は入るんですか? http://echo.5ch.net/test/read.cgi/tech/1175663346/903
904: 903 [sage] 2007/10/09(火) 04:31:35 すんません、ラムダ式が使えるんですね。 http://ja.wikipedia.org/wiki/C++0x#.E3.83.A9.E3.83.A0.E3.83.80.E9.96.A2.E6.95.B0.E3.81.A8.E3.83.A9.E3.83.A0.E3.83.80.E5.BC.8F http://echo.5ch.net/test/read.cgi/tech/1175663346/904
905: デフォルトの名無しさん [sage] 2007/10/09(火) 10:06:11 >>904 その Wikipedia の記事は、どういう新機能が会議で提案されてるかをかいてるので、どれが実際に C++0x に入りそうかは別個の話だよ。 http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2007/n2389.html をみたかぎりではλ式は間に合わなさそう。 これ以上はスレ違いなので C++0x スレで。 http://echo.5ch.net/test/read.cgi/tech/1175663346/905
906: デフォルトの名無しさん [sage] 2007/10/09(火) 10:09:41 と思って書き込んでからちゃんとよんでみたら、なんとかなりそうなのかな。よくわかりません。失礼しました http://echo.5ch.net/test/read.cgi/tech/1175663346/906
907: デフォルトの名無しさん [sage] 2007/10/09(火) 17:43:57 VC++2005EEの環境で>>878のコードをビルドしてみたんですが、リンクエラーが出てしまいます。 ランタイムライブラリをMT,MTd,MD,MDdのそれぞれ1回ずつ、バッチビルドでDebugとReleaseの両方をビルドしてみたんですが、どれもリンクエラーが出ました。 ↓はMDdでビルドしたときのエラーです。 ------ ビルド開始: プロジェクト: aa, 構成: Release Win32 ------ aa.obj : error LNK2001: 外部シンボル ""__declspec(dllimport) class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl std::operator<<<char,struct std::char_traits<char> > (class std::basic_ostream<char,struct std::char_traits<char> > &,char)" (__imp_??$?6DU?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@D@Z)" は未解決です。 aa.obj : error LNK2001: 外部シンボル ""__declspec(dllimport) private: static char const * __cdecl std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::_Nullstr(void)" (__imp_?_Nullstr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPBDXZ)" は未解決です。 aa.obj : error LNK2001: 外部シンボル ""__declspec(dllimport) char const `private: static char const * __cdecl std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::_Nullstr(void)'::`2'::_C" (__imp_?_C@?1??_Nullstr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPBDXZ@4DB)" は未解決です。 aa.obj : error LNK2001: 外部シンボル ""__declspec(dllimport) class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl std::operator<<<char,struct std::char_traits<char> > (class std::basic_ostream<char,struct std::char_traits<char> > &,char const *)" (__imp_??$?6DU?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z)" は未解決です。 http://echo.5ch.net/test/read.cgi/tech/1175663346/907
908: デフォルトの名無しさん [sage] 2007/10/09(火) 17:46:46 907の続き Debugのエラーはあまりにも長いので、とりあえずReleaseだけにしておきます。 どこか設定が間違っているのでしょうか? お願いします。 http://echo.5ch.net/test/read.cgi/tech/1175663346/908
909: デフォルトの名無しさん [sage] 2007/10/09(火) 18:13:43 >>907 2005、Boost1.34だが、 31->33行目はoperator()で書き直せば通ったけど? A[0][0]=1.0; -> A(0,0)=1.0; http://echo.5ch.net/test/read.cgi/tech/1175663346/909
910: 907 [sage] 2007/10/09(火) 19:49:15 >>909 A[0][0]=1.0; -> A(0,0)=1.0;に書き換えてみましたが、同じエラーが出てしまいます。 ちなみにboost1.34.0だと、 c:\library\boost_1_34_0\boost\numeric\ublas\detail\config.hpp(174) : fatal error C1189: #error : Your compiler is unsupported by this verions of uBLAS. Boost 1.32.0 includes uBLAS with support for many old compilers. というエラーが出てしまうので、1.32.0を入れました。 リンクエラーの意味がわからないので、どうすればいいのかさっぱり・・・。 http://echo.5ch.net/test/read.cgi/tech/1175663346/910
911: 909 [sage] 2007/10/09(火) 20:32:32 >>910 ランタイムライブラリは マルチスレッド(デバッグ)?DLL 使わないとエラー大量に出るよ。 lib,includeディレクトリには1つのバージョンのみのBoostだけ入れてよ。 Boost1.34.1 これでもできないならなんか環境ファイルが壊れてるのかもしれん。 http://echo.5ch.net/test/read.cgi/tech/1175663346/911
912: 907 [sage] 2007/10/09(火) 22:44:28 >>911 1.34.1入れてビルドしてみましたが、やはり>>910に書いたエラーが出てしまいます。 (このエラーが出るということは、コンパイラが1.34.1のublasに対応してないということですよね?) 1.32.0でビルドすれば、コンパイルは通るんですが、 どのラインタイムライブラリでやっても、>>907のリンクエラーかそれよりたくさんのリンクエラーが出てしまいます。 リンクエラーの内容がstd::basic_ostreamとかだったりするのは、 やはり環境変数がちゃんと設定できていないか、壊れているかそのあたりがあやしいですか? http://echo.5ch.net/test/read.cgi/tech/1175663346/912
913: デフォルトの名無しさん [sage] 2007/10/10(水) 01:38:03 boost::test::unit_test ってテスト終了時に メモリリークの検出までやってくれるんだね。 どういう方法でリークを検出しているんだろう。 もしかしてメモリアロケータを標準のものから 置き換えてなにかやってるのかな? http://echo.5ch.net/test/read.cgi/tech/1175663346/913
914: デフォルトの名無しさん [sage] 2007/10/10(水) 02:44:06 >>912 通りすがりだけど・・・ #include <ublasのヘッダもろもろ> int main() { // 何も書かない return 0; } でコンパイル通る? 経験則から言うとVC7以上であればublasのバージョンは問題ないと思う >>913 unit_testのメモリリーク検出良いよね うっかりポインタ操作をミスしていたのを見つけてくれたことがあるよ http://echo.5ch.net/test/read.cgi/tech/1175663346/914
915: 907 [sage] 2007/10/10(水) 04:01:05 >>914 ヘッダだけのコードを1.32.0でビルドしたら成功しました。(1.34.1は、やはり>>910のエラー) 1.34.1でビルドするとboost/numeric/ublas/detail/config.hppの // Version 6.0 and 7.0 #if BOOST_MSVC <= 1300 #define BOOST_UBLAS_UNSUPPORTED_COMPILER 1 #endif の条件に該当してそうです。 コメントアウトでいろいろコードを削って試してみたら、どうもstd::coutを使うとリンクエラーが出るっぽいです。 原因がスレ違いで申し訳ないです。 あとは自分でなんとかします。 レスくれた方々、ありがとうございました。 http://echo.5ch.net/test/read.cgi/tech/1175663346/915
916: デフォルトの名無しさん [sage] 2007/10/11(木) 02:58:54 unit_testの話題が出ているので...質問させてください 他のライブラリを使用したコードのテストをするため unit_testを利用しようとしたところ、リンカで次のエラーを得ました ***.lib(main.obj) : error LNK2019: 未解決の外部シンボル _MAIN__ が関数 _main で参照されました。 unit_testがmain関数を横取りしていることあたりが原因だとは思うのですが 何とか上手く回避できないものでしょうか? お心当たりのある方はご教示いただけると幸いです http://echo.5ch.net/test/read.cgi/tech/1175663346/916
917: デフォルトの名無しさん [sage] 2007/10/11(木) 03:31:31 unit_testを使わない boostなんて無理してまでも使うもんじゃない。 http://echo.5ch.net/test/read.cgi/tech/1175663346/917
918: デフォルトの名無しさん [sage] 2007/10/12(金) 07:06:33 お前ら、ステートマシンはどのライブラリを使っていますか? Cで書いた糞自作ライブラリから乗り換えようと思ってるんですが。 http://echo.5ch.net/test/read.cgi/tech/1175663346/918
919: デフォルトの名無しさん [sage] 2007/10/12(金) 07:29:57 糞自作ライブラリから乗り換えようと思った理由は? http://echo.5ch.net/test/read.cgi/tech/1175663346/919
920: デフォルトの名無しさん [sage] 2007/10/12(金) 09:11:09 ttp://www.boost.org/more/formal_review_schedule.html Boost.FSM 10/21〜 http://echo.5ch.net/test/read.cgi/tech/1175663346/920
921: デフォルトの名無しさん [sage] 2007/10/12(金) 09:15:29 FSMは昔GPGに載ってたAI用のやつをいじって使ってる http://echo.5ch.net/test/read.cgi/tech/1175663346/921
922: デフォルトの名無しさん [sage] 2007/10/12(金) 09:32:38 >>918 Cベースで、状態遷移時のコールバック関数へのポインタが むき出しだったり、いやなことが多いのと、あのころの 自分を忘れたかったから。 >>920 お、レビューが始まるんですか。 ちょっと前に話題が出てた Property も? と思ったらこれは Property Map か。。 http://www.boost.org/libs/statechart/doc/index.html これと比べてどちらを使うべきかについてのアドバイスのような ページがどっかにあったんだけど、以前読んだ時に結局 判断がつかなくてずっと自作ライブラリ使ってたんだけど、 もう嫌になったから・・・ http://echo.5ch.net/test/read.cgi/tech/1175663346/922
923: デフォルトの名無しさん [sage] 2007/10/12(金) 20:21:25 typedef使えばいいような http://echo.5ch.net/test/read.cgi/tech/1175663346/923
924: デフォルトの名無しさん [sage] 2007/10/13(土) 14:37:13 テキストエディタ使ってコマンドラインからコンパイルしようとすると boost関連のincludeが見つからないと怒られたので vsvars32.batにboostのincludeとlibパスを追加してみたら 今度はfatal error LNK1120: 外部参照 1 が未解決です。と出る どうしたら良いのでしょうか? http://echo.5ch.net/test/read.cgi/tech/1175663346/924
925: 924 [sage] 2007/10/13(土) 14:42:35 書き忘れ VC2005EEです。。。 http://echo.5ch.net/test/read.cgi/tech/1175663346/925
926: デフォルトの名無しさん [sage] 2007/10/13(土) 14:56:29 具体的に何が見付かりませんと表示されるだろう。 そっち見ないとわからない。たぶんスレ違いの気がするけれど。 http://echo.5ch.net/test/read.cgi/tech/1175663346/926
927: 924 [sage] 2007/10/13(土) 15:02:11 error LNK2019: 未解決の外部シンボル "void __cdecl boost::throw_exception(class std::exception const &)" (?throw_exception@boost@@YAXABVexception@std@@@Z) が関数 " int __cdecl boost::lexical_cast<int,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > (class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??$lexical_cast@HV?$basic_string@DU?$char_traits@D@std@@V? $allocator@D@2@@std@@@boost@@YAHABV?$basic_string@DU?$char_traits@D@std@@ V?$allocator@D@2@@std@@@Z) で参照されました。 boosttest.exe : fatal error LNK1120: 外部参照 1 が未解決です。 長いんでカットしてました スレ違いならごめんなさい http://echo.5ch.net/test/read.cgi/tech/1175663346/927
928: デフォルトの名無しさん [sage] 2007/10/14(日) 19:34:47 うちはうまくうごいとるよ http://echo.5ch.net/test/read.cgi/tech/1175663346/928
929: デフォルトの名無しさん [sage] 2007/10/14(日) 20:12:48 boostでまだ使えないvc向けのものがあるね http://echo.5ch.net/test/read.cgi/tech/1175663346/929
930: デフォルトの名無しさん [sage] 2007/10/14(日) 23:32:14 >>927 VC のオプションの「C++ の例外を有効にする」がいいえになってるか 明示的に BOOST_NO_EXCEPTIONS を定義したのでは? http://echo.5ch.net/test/read.cgi/tech/1175663346/930
931: デフォルトの名無しさん [sage] 2007/10/15(月) 15:02:33 YAMLの実装はありますか? http://echo.5ch.net/test/read.cgi/tech/1175663346/931
932: 924 [sage] 2007/10/15(月) 18:11:46 >>930 遅レスですいません ビンゴでした /EHsc オプションつけたらコンパイル通った ありがとうございました でも、なにもした覚えはないんだけどな・・・ http://echo.5ch.net/test/read.cgi/tech/1175663346/932
933: デフォルトの名無しさん [sage] 2007/10/15(月) 18:15:01 実行時型情報を使うのってあんまり気持ち良くないなぁ。 おまえらは全然抵抗ありませんか? 型に関するあれやこれやはコンパイル時に解決 されているのがC++のいいところだと思ってたんだけど。 あと、これは単なるコーディングスタイルなんだけど、 メンバ変数をアクセスするときに this-> を強制したいなぁ。 あくまで自分が間違えてメンバ変数と同じ名前のローカル変数を 作ってしまうことがあるバカ者だからなんだけどね。 まぁこれは命名規則をきっちり決めておけばいいんだろうけど。 http://echo.5ch.net/test/read.cgi/tech/1175663346/933
934: デフォルトの名無しさん [sage] 2007/10/15(月) 18:56:28 boostと何の関係が? http://echo.5ch.net/test/read.cgi/tech/1175663346/934
935: デフォルトの名無しさん [sage] 2007/10/15(月) 19:11:01 RTTIをオフにすると、Boost のなかで使えない ライブラリが出てくる。どのライブラリが RTTIを要求するか、例外のサポートを要求するかについての リストがあれば便利なケースもあるんじゃないかなぁ、とか思いながら。 さすがに組み込みで Boost の全ライブラリのサポートを 要求する人はいないと思うが、どれが使えてどれが使えないか わかればいいなぁ。 http://echo.5ch.net/test/read.cgi/tech/1175663346/935
936: デフォルトの名無しさん [sage] 2007/10/15(月) 21:50:35 独り言うぜぇ http://echo.5ch.net/test/read.cgi/tech/1175663346/936
937: デフォルトの名無しさん [sage] 2007/10/15(月) 22:01:11 つうか、メンバ変数は大抵 xxx_ とか m_xxx でぶつからないだろ http://echo.5ch.net/test/read.cgi/tech/1175663346/937
938: デフォルトの名無しさん [sage] 2007/10/15(月) 22:56:57 インテリセンスで使いやすいように _xxx じゃ問題ある? http://echo.5ch.net/test/read.cgi/tech/1175663346/938
939: デフォルトの名無しさん [sage] 2007/10/15(月) 23:08:43 >>938 頭にアンダースコアの識別子は標準ライブラリやコンパイラのベンダのためにあるから使っちゃ駄目。 http://echo.5ch.net/test/read.cgi/tech/1175663346/939
940: デフォルトの名無しさん [sage] 2007/10/15(月) 23:12:26 >>939 はい、間違いです。規格書読み直してくださいね。 http://echo.5ch.net/test/read.cgi/tech/1175663346/940
941: デフォルトの名無しさん [sage] 2007/10/16(火) 00:00:50 >17.4.3.1.2 Global names >Certain sets of names and function signatures are always reserved to the implementation: >Each name that contains a double underscore (_ _) or begins with an underscore followed by an uppercase >letter (2.11) is reserved to the implementation for any use. >Each name that begins with an underscore is reserved to the implementation for use as a name in the >global namespace 大文字でないので、メンバに使うのはおkってことか? なんにせよ俺は使いたくはないな。 http://echo.5ch.net/test/read.cgi/tech/1175663346/941
942: デフォルトの名無しさん [sage] 2007/10/16(火) 00:51:09 マクロとぶつかったりするととても悲しいのでやめた方が無難 http://echo.5ch.net/test/read.cgi/tech/1175663346/942
943: デフォルトの名無しさん [sage] 2007/10/16(火) 08:19:50 バカかお前。ぶつからねーって回転だろ http://echo.5ch.net/test/read.cgi/tech/1175663346/943
944: デフォルトの名無しさん [sage] 2007/10/16(火) 19:38:49 独自のテンプレートライブラリを作るときに boost::mplを使うときに一々ヘッダでboost::mpl::bindとか完全修飾で書くとみにくいので namespace mpl = boost::mplとかusingを使いたいんですが namespace my_lib { namespace hoge_impl { } http://echo.5ch.net/test/read.cgi/tech/1175663346/944
945: 944 [sage] 2007/10/16(火) 19:46:07 namespace my_lib { namespace hogee_impl { // *この名前空間でusingやnamespace hoge = foo::bar;を使う tempalte<class Hoge, class Huga, class Foo> struct impl { typedef ... type; }; } // namespace hoge_impl tempalte<class Hoge, class Huga, class Foo> struct hogee { typedef typename hogee_impl<Hoge,Huga,Foo>::type type; }; } // namespace my_lib というようにしてhogeeをmy_lib::hogeeとして使えば問題ありませんか? ADLとかまだよくわからないのでちょっと心配です http://echo.5ch.net/test/read.cgi/tech/1175663346/945
946: デフォルトの名無しさん [sage] 2007/10/16(火) 21:56:08 それってBoostと関係あるのか? http://echo.5ch.net/test/read.cgi/tech/1175663346/946
947: デフォルトの名無しさん [sage] 2007/10/16(火) 23:37:09 >>945 どんなことが起こるのを心配してるの? 見た感じ、好きにすれば、って感じなんだけど。 http://echo.5ch.net/test/read.cgi/tech/1175663346/947
948: デフォルトの名無しさん [sage] 2007/10/17(水) 21:01:27 struct A{ long a; }; struct B{ A inner; explicit B(long n){ inner.a = n;} }; struct GetB_ : public std::unary_function<B&, A&>{ A& operator()(B& element) const{ return element.inner;} }; typedef std::vector<B> vectorB; typedef boost::transform_iterator<GetB_, vectorB::iterator> testIterator; int main(){ vectorB v; for(int i=0; i<100; ++i) v.push_back(B(i)); testIterator p2(v.begin(), GetB_()); cout << typeid(p2[0]).name() << endl; //cout << p2[0].a << endl;←コンパイルエラー return 0; } transform_iteratorについての質問なんですが p2[0]の型がclass boost::detail::operator_brackets_proxy<class boost::transform_iterator<class GetB_,class std::_Vector_iterator<struct B,class std::allocator<struct B> >,struct boost::use_default,struct boost::use_default> > ってなってて、[]演算子だけ変です。これでは使い物になりません。 iterator_facade.hpp見ると、 // A proxy return type for operator[], needed to deal with // iterators that may invalidate referents upon destruction. // Consider the temporary iterator in *(a + n) と書いてありますが、いまいちわかりません。 自分でイテレータ作るしかないんでしょうか…? http://echo.5ch.net/test/read.cgi/tech/1175663346/948
949: デフォルトの名無しさん [sage] 2007/10/17(水) 23:03:33 >948 都合により直接メンバアクセスすることはできない。ただし、A& に変換することはできる。 ということで、不格好だけど、static_cast<A&)(p2[0]).a みたいにするか、long& getA(A& a) { return a.a; } を作って getA(p2[0]) みたいにする必要がある。 コメントの部分はこういうことだと思う。 p2[n] が A& を直接返していたとする。 この時返ってくる A& は *(p2 + n) の結果なんだけど、 p2 + n は iterator の一時オブジェクトで既に破棄されていることになる。 iterator によっては自分が破棄された場合に、指し先(この場合返ってきた A&)も無効化するものがあるかもしれない。 ということで、p2 + n に対応する iterator が存在することを保証するために proxy オブジェクトが使用されている。 http://echo.5ch.net/test/read.cgi/tech/1175663346/949
950: デフォルトの名無しさん [sage] 2007/10/18(木) 01:17:26 >>949 あー、なるほど。 分かりやすい解説ありがとうございます。 確かに、さっきのp2で cout << (*(p2 + 5)).a << endl; って添え字演算子と同じことをやると、Visual Studio がアサート失敗を出す。 vectorのイテレータが破棄されちゃうのね…。 >>948は例のためにvector使ったんで、 実は本当にtransform_iterator使いたいのはポインタだからこの問題は起こらない…。 transform_iteratorを継承してoperator[]を隠蔽してみます。 http://echo.5ch.net/test/read.cgi/tech/1175663346/950
951: デフォルトの名無しさん [sage] 2007/10/18(木) 02:25:28 >>950 次スレ立てよろしく http://echo.5ch.net/test/read.cgi/tech/1175663346/951
952: デフォルトの名無しさん [sage] 2007/10/18(木) 07:59:28 ほーい http://echo.5ch.net/test/read.cgi/tech/1175663346/952
953: デフォルトの名無しさん [sage] 2007/10/18(木) 09:13:20 >>950 iteratorは継承して作ってはいけない http://echo.5ch.net/test/read.cgi/tech/1175663346/953
954: デフォルトの名無しさん [sage] 2007/10/18(木) 13:31:10 書くの面倒だけど書かないとね。 iterater_facadeとか使って。 http://echo.5ch.net/test/read.cgi/tech/1175663346/954
955: デフォルトの名無しさん [sage] 2007/10/18(木) 14:02:59 つーかそれ無しだと書く気が起きない http://echo.5ch.net/test/read.cgi/tech/1175663346/955
956: デフォルトの名無しさん [sage] 2007/10/18(木) 17:22:44 >>781 int | ∞ を表現するのに便利そう。> boost::optional http://echo.5ch.net/test/read.cgi/tech/1175663346/956
957: デフォルトの名無しさん [sage] 2007/10/18(木) 17:41:53 次スレ Boostを語れゴラァ part5 http://pc11.2ch.net/test/read.cgi/tech/1192662575/ 立てたはいいけどここに報告するの忘れてたよ http://echo.5ch.net/test/read.cgi/tech/1175663346/957
958: デフォルトの名無しさん [sage] 2007/10/19(金) 02:11:15 > boost::optional 通常処理→戻り値数値 通常処理でない→戻り値NULL という関数を試作したらNULL値が0として振る舞って失敗した事があった そのとき代替で使ってみた。良い方法かどうかは知らないけど http://echo.5ch.net/test/read.cgi/tech/1175663346/958
959: デフォルトの名無しさん [sage] 2007/10/19(金) 07:21:25 ワラ http://echo.5ch.net/test/read.cgi/tech/1175663346/959
960: デフォルトの名無しさん [sage] 2007/10/19(金) 12:50:05 まさかこういうことをしたのか・・・。 int hoge() { return NULL; } http://echo.5ch.net/test/read.cgi/tech/1175663346/960
961: デフォルトの名無しさん [sage] 2007/10/19(金) 12:53:05 そのレベルでBoost使ってたらいろいろと苦労しそうだね。 http://echo.5ch.net/test/read.cgi/tech/1175663346/961
962: デフォルトの名無しさん [sage] 2007/10/19(金) 13:50:12 Win32のことかー http://echo.5ch.net/test/read.cgi/tech/1175663346/962
963: デフォルトの名無しさん [sage] 2007/10/19(金) 20:01:08 >>958 例外使うところなのでは? …それがいやなら結果入れる変数を参照渡し… http://echo.5ch.net/test/read.cgi/tech/1175663346/963
964: デフォルトの名無しさん [sage] 2007/10/19(金) 20:03:24 結果変数を渡すくらいならoptional使えばいいだろ http://echo.5ch.net/test/read.cgi/tech/1175663346/964
965: デフォルトの名無しさん [sage] 2007/10/20(土) 10:06:12 >>963 頭固いねー http://echo.5ch.net/test/read.cgi/tech/1175663346/965
966: デフォルトの名無しさん [] 2007/10/20(土) 11:39:48 なにいってるんだ、NULL渡したいならnullptrだろ? http://echo.5ch.net/test/read.cgi/tech/1175663346/966
967: デフォルトの名無しさん [sage] 2007/10/20(土) 11:41:52 optionalあるんだからoptional使えばいいだろ http://echo.5ch.net/test/read.cgi/tech/1175663346/967
968: デフォルトの名無しさん [sage] 2007/10/20(土) 12:58:50 >>966 別に NULL を返したいんじゃなくて、 エラーが識別できれば何でもいいだろう。 まさに optional の適用事例。 http://echo.5ch.net/test/read.cgi/tech/1175663346/968
969: デフォルトの名無しさん [sage] 2007/10/20(土) 13:28:29 boost.optionalごときにカリカリしすぎ http://echo.5ch.net/test/read.cgi/tech/1175663346/969
970: デフォルトの名無しさん [sage] 2007/10/20(土) 14:22:37 tupleでいいと思うけど人気無いの? 単にエラーコードと結果両方返したいだけなら tupleどころかstd::pairでもいいと思うけど。 http://echo.5ch.net/test/read.cgi/tech/1175663346/970
971: デフォルトの名無しさん [sage] 2007/10/20(土) 15:14:09 >>970 optionalの方が良いから。 http://echo.5ch.net/test/read.cgi/tech/1175663346/971
972: デフォルトの名無しさん [sage] 2007/10/20(土) 18:26:04 >>970 それじゃぁ、エラーコードを不用意に無視することができてしまうだろ。 エラーコードを無視させにくくするためには optional みたいな 仕組みがいい。例外もエラーを無視させない仕組みなので、 例外を使ってもいいとは思うけど。故意に無視することができるのは どちらも同じ。 optional を使ってエラー状態を通知する方法と 例外を使ってエラーの発生を通知する方法の違いは 直情より上の呼び出し元までエラー状態が伝搬するか否か。 http://echo.5ch.net/test/read.cgi/tech/1175663346/972
973: デフォルトの名無しさん [sage] 2007/10/20(土) 18:26:57 >>970 俺もそう思う std::map::insert が pair 返すし tuple は tr1 にあるけど、optional は無いし http://echo.5ch.net/test/read.cgi/tech/1175663346/973
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 28 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.021s