[過去ログ]
Boostを語れゴラァ part3 (1001レス)
Boostを語れゴラァ part3 http://echo.5ch.net/test/read.cgi/tech/1158991211/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
642: デフォルトの名無しさん [sage] 2007/01/19(金) 01:00:06 質問です。 クラスAとクラスBがあるとしてshared_ptrで相互参照するのはNGというのを最近知りました。 すると、相互参照したい場合は class A{ weak_ptr<B> b; } class B{ shared_ptr<A> a; } とすれば良いのでしょうか。ちなみにAは一つしか存在しないBの管理クラスで、Bは複数存在する管理されるクラスなのですが、 その場合はこのように管理される側が管理する側をshared_ptrで参照して、管理する側が管理される側をweak_ptrで保持するのが良いのでしょうか。 あとscoped_ptrというのもあるようで、それぞれどういう時に利用すれば良いのかまだいまいち掴めません。 http://echo.5ch.net/test/read.cgi/tech/1158991211/642
643: デフォルトの名無しさん [sage] 2007/01/19(金) 06:57:25 >>641 getは設計が古くなっている。 戻り値指定なしでもできるが長くなるのでこんな感じで template<typename Result, int i> struct get { /**/ typedef Result result_type; /**/ template<typename Tuple> /**/ Result operator()(Tuple& t) const /**/ { return boost::get<i>(t); } }; bind(get<double, 0>(), _1); http://echo.5ch.net/test/read.cgi/tech/1158991211/643
644: デフォルトの名無しさん [sage] 2007/01/19(金) 07:27:37 >>642 各オブジェクトの寿命を考えてみたらいいと思うよ。 あと、weak_ptrはオブジェクトを参照するときに 一時的なshared_ptrを作成するのでコストがかかるね。 scoped_ptr, scoped_arrayは、受け取ったポインタを 自分の寿命が切れるときにdeleteするだけのポインタクラス。 C++の仕様がわかっていれば使い道はいろいろ。 http://echo.5ch.net/test/read.cgi/tech/1158991211/644
645: デフォルトの名無しさん [sage] 2007/01/19(金) 14:15:52 で、いつ標準化されるんですかね。 http://echo.5ch.net/test/read.cgi/tech/1158991211/645
646: デフォルトの名無しさん [sage] 2007/01/20(土) 00:52:42 >>643 おお、ありがとう。 やっぱり戻り値の型が判別できないのが問題なのかな? 色々いじりつつ、もう一度 lambda の sig を読んでみたら、今度はちょっと分かった気が。 template <int i> struct get { /**/ template <class Tuple> /**/ typename boost::tuples::element<i, Tuple>::type operator()(Tuple& t) const { /******/ return boost::get<i>(t); /**/ } /**/ template <class Args> /**/ class sig { /******/ typedef typename boost::tuples::element<1, Args>::type Tuple; /******/ typedef typename boost::tuples::element<i, Tuple>::type Result; /**/ public: /******/ typedef typename boost::remove_cv<Result>::type type; /**/ }; }; bind(get<0>(), _1); ってことで、こう書いたらとりあえず行けたんだが、こんな感じでいいのかな? もっといいやり方があったりするんだろうか。 しかし、関数オブジェクトならこれでいい(?)けど、テンプレート関数には sig は使えないよね。 ということは、関数の場合はテンプレート引数を全部指定しないとダメってことかな。 いや、でも、boost::get<> のテンプレート引数全部指定してもダメだったし、キャストしてもムリだったような。 なんかまたよくわからなくなってきた…(´・ω・`) http://echo.5ch.net/test/read.cgi/tech/1158991211/646
647: デフォルトの名無しさん [sage] 2007/01/20(土) 11:19:05 引数指定が間違ってるんだろう。consとかいるぞ そもそもgetのシグニチャーは公開されてないと思われるので書いてはいけない。 要は君の::getが主役で、boost::getはシンタックスシュガーだ 関数オブジェクトがつねに偉いのだ http://echo.5ch.net/test/read.cgi/tech/1158991211/647
648: デフォルトの名無しさん [sage] 2007/01/21(日) 20:32:31 bindで結合されたオブジェクトをfor_eachで適用するとき,適用されたオブジェクトを取り出すには for_eachの結果を何に代入すればいいのでしょうか? struct fn1 { double sum; void operator()(double &t ) {sum += t;} } fn1.sum=0; 何に代入したらオブジェクトfn1を取り出せる? =for_each(ar.begin(),ar.end(), boost::bind( fn1, boost::bind(fn2,_1 )) ); 代入しないと fn1.sum==0 となる http://echo.5ch.net/test/read.cgi/tech/1158991211/648
649: デフォルトの名無しさん [sage] 2007/01/21(日) 20:41:39 >>648 bind() された関数オブジェクトの型は決められていないから、無理。 かわりに、結果の書き込み先を参照で持たせるのがいいんじゃない? 総和なら std::accumulate() 使えばいいんだけどね。 ソース貼るならコンパイルできるかどうか見直せよ。 http://echo.5ch.net/test/read.cgi/tech/1158991211/649
650: デフォルトの名無しさん [sage] 2007/01/21(日) 20:48:45 boost::bind(boost::ref(fn1), http://echo.5ch.net/test/read.cgi/tech/1158991211/650
651: デフォルトの名無しさん [sage] 2007/01/21(日) 20:52:54 >>650 できました 感謝 http://echo.5ch.net/test/read.cgi/tech/1158991211/651
652: デフォルトの名無しさん [sage] 2007/01/22(月) 01:40:45 lambda のtestコード algorithm_test.cpp がMSVC8でコンパイル通らない http://echo.5ch.net/test/read.cgi/tech/1158991211/652
653: デフォルトの名無しさん [sage] 2007/01/22(月) 03:06:39 >>649←恥ずかしい人ハケン http://echo.5ch.net/test/read.cgi/tech/1158991211/653
654: デフォルトの名無しさん [sage] 2007/01/22(月) 06:14:33 よかったね。毎日が発見の連続だね。 http://echo.5ch.net/test/read.cgi/tech/1158991211/654
655: 649 [sage] 2007/01/22(月) 07:01:48 ん?何か変なこと言ったか? http://echo.5ch.net/test/read.cgi/tech/1158991211/655
656: デフォルトの名無しさん [sage] 2007/01/22(月) 16:11:33 みなさん、boost::FileSystemって使ってます? 日本語対応してないとかmingwで一部テストがエラーとか、ちょっと使うのに二の足踏んでます。 でも移植性のある他の代替選択肢もなさそうだしなぁ・・・。 http://echo.5ch.net/test/read.cgi/tech/1158991211/656
657: デフォルトの名無しさん [sage] 2007/01/22(月) 16:39:05 >> でも移植性のある他の代替選択肢もなさそうだしなぁ・・・。 boost以外のポータブルなライブラリを使えばよいのでは。 ファイルシステム関連でMBCS/WCSに対応してないって、実用上論外だと思うが。 Shift_JIS環境では使い物にならないし、Win32のFindFirstFileA()って パス長に思いっきり制限あるし。 http://echo.5ch.net/test/read.cgi/tech/1158991211/657
658: デフォルトの名無しさん [sage] 2007/01/22(月) 17:16:19 CVSから1.34拾ってこい。 http://echo.5ch.net/test/read.cgi/tech/1158991211/658
659: デフォルトの名無しさん [sage] 2007/01/22(月) 17:47:54 がらっと変わってるよね 念願の basic_path 化とか他盛りだくさん http://boost.cvs.sourceforge.net/*checkout*/boost/boost/libs/filesystem/doc/index.htm?pathrev=RC_1_34_0 http://echo.5ch.net/test/read.cgi/tech/1158991211/659
660: デフォルトの名無しさん [sage] 2007/01/22(月) 19:35:35 1.34 早くリリースされないかな? http://echo.5ch.net/test/read.cgi/tech/1158991211/660
661: デフォルトの名無しさん [sage] 2007/01/22(月) 21:28:32 1.35は大変なことになるというか、もう別の言語というか Fusion, MPI, Asio, Interprocessなどなど ライブラリに関しては、標準が何かするべきではないと思う 標準は、発表の場を提供することに予算を使うべきだ。 そして、その場所を標準として定義すべきだ(とか言ってしまおう) 実際stlportが泥を被っているわけだしな BoostがなければC++は死んでたよ http://echo.5ch.net/test/read.cgi/tech/1158991211/661
662: デフォルトの名無しさん [sage] 2007/01/22(月) 22:11:32 >>661 すまんが言いたいことがよくわからん。 もうちょっと具体的 and/or 他人に理解できるようにお願い。 http://echo.5ch.net/test/read.cgi/tech/1158991211/662
663: デフォルトの名無しさん [sage] 2007/01/22(月) 22:40:02 signalを関数objectとしてfor_eachに渡す方法はないのでしょうか? struct obj1 { void operator()(double &t) const {std::cout << "obj1:" << t << " " ;} }; struct obj2 { void operator()(double &t) const {std::cout << "obj2:" << t << " " ;} }; boost::signal1< void ,double> sig; sig.connect(obj1()); sig.connect(obj2()); std::vector<double > ar; std::for_each(ar.begin(),ar.end(),sig) err sigのプライベートメンバーにアクセスできません となってfor_eachに渡せません 単にobj1,2を両方使いたいだけなんだけど http://echo.5ch.net/test/read.cgi/tech/1158991211/663
664: 663 [sage] 2007/01/22(月) 22:56:26 自己解決しました std::for_each(ar.begin(),ar.end(),boost::bind<void>(boost::ref(sig), _1)); でできました http://echo.5ch.net/test/read.cgi/tech/1158991211/664
665: デフォルトの名無しさん [sage] 2007/01/24(水) 09:21:05 gil::transform_channels(pixel1,pixel2,pixel3, ( 1.0/(boost::lambda::_1 - boost::lambda::_2) ) ); がコンパイルエラーになるのですが、 何か見落としているのでしょうか? http://echo.5ch.net/test/read.cgi/tech/1158991211/665
666: 665 [sage] 2007/01/24(水) 09:51:28 エラーの原因 gil::transform_channels(pixel1, pixel2, pixel3 を使ってるはずが lambdaを使ったとたん gil::transform_channels(const pixel1,const pixel2, pixel3 に入れ替わってしまうことが原因のようです http://echo.5ch.net/test/read.cgi/tech/1158991211/666
667: 665 [sage] 2007/01/24(水) 09:52:00 gil::transform_channels(pixel1,pixel2,pixel3, std::plus<double>() ); とするとコンパイルは通ります http://echo.5ch.net/test/read.cgi/tech/1158991211/667
668: デフォルトの名無しさん [sage] 2007/01/24(水) 10:50:48 MSVC++7.1, boost1.33.1の環境です。 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3506.txt のコードを実行すると、自分の環境では boost::regex_search()で例外が発生してしまいます。 ("Memory exhausted"). これはboost:regexのバグでしょうか。対処方法はありますか。 別にやっていること自体は大したことでは無いはずです。 (このパターンはこの入力に対してはマッチしません)。 C#, Java, JScript, ICU, 鬼車, 等々で、全く同じ正規表現と入力を用いて 同等のパターンマッチを試みても、何の問題も発生しないことは確認済みです。 http://echo.5ch.net/test/read.cgi/tech/1158991211/668
669: デフォルトの名無しさん [sage] 2007/01/24(水) 12:43:19 そんなことより文章のほうに目がいった http://echo.5ch.net/test/read.cgi/tech/1158991211/669
670: デフォルトの名無しさん [sage] 2007/01/24(水) 13:00:18 エロかとおもったら三四郎じゃないすか http://echo.5ch.net/test/read.cgi/tech/1158991211/670
671: デフォルトの名無しさん [] 2007/01/24(水) 22:55:12 boost のヘッダは <boost/...hpp> と "boost/...hpp" と、どちらがお勧めですか? http://echo.5ch.net/test/read.cgi/tech/1158991211/671
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 330 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.009s