Boostを語れゴラァ part5
■ このスレッドは過去ログ倉庫に格納されています
0001BOOTS
2007/10/18(木) 08:09:35過去スレ
part 4 http://pc11.2ch.net/test/read.cgi/tech/1175663346/
part 3 http://pc11.2ch.net/test/read.cgi/tech/1158991211/
part 2 http://pc8.2ch.net/test/read.cgi/tech/1139313234/
part 1 http://pc8.2ch.net/test/read.cgi/tech/1091198276/
■関連サイト■
Boost C++ Libraries
http://www.boost.org/
Boost 翻訳プロジェクト
http://boost.cppll.jp/HEAD/
Let's Boost
http://www.kmonos.net/alang/boost/
boost info
http://shinh.skr.jp/boost/
0308デフォルトの名無しさん
2008/01/13(日) 15:25:290309デフォルトの名無しさん
2008/01/13(日) 15:59:13Lets boostで書いてあったのですが、具体的にどうやれば
良いのでしょうか?
0310デフォルトの名無しさん
2008/01/13(日) 16:35:300311デフォルトの名無しさん
2008/01/13(日) 16:39:01絶対パスである必要はあるの?
0312デフォルトの名無しさん
2008/01/13(日) 16:41:410313デフォルトの名無しさん
2008/01/13(日) 16:45:07Letsだと変換が用意されてるように書かれてましたが、
自前変換しかないんですかねぇ。
0314デフォルトの名無しさん
2008/01/13(日) 16:48:12../ の場合、何も付いてない場合、ドライブレターの場合(最初から絶対パス)、
さらに/が\な場合など、かなり面倒な・・・
0315デフォルトの名無しさん
2008/01/13(日) 17:05:29とか、
system_complete()
で簡単に変換できると思うが。
0316デフォルトの名無しさん
2008/01/13(日) 17:16:180317デフォルトの名無しさん
2008/01/13(日) 17:20:34まさにsoreda!
感謝感謝
0318デフォルトの名無しさん
2008/01/14(月) 00:43:06だってC++の標準ライブラリが貧弱すぎて話にならないから。
簡単なところでは正規表現とかshared_ptrとか。
bindとmem_fnもC++標準のよりBoostのほうが使いやすい。
0319デフォルトの名無しさん
2008/01/14(月) 01:25:06どうでもよくね?
プログラム全体から見ると、Boostで楽になる部分なんて 1% 以下でしょ。
0320デフォルトの名無しさん
2008/01/14(月) 01:28:180321デフォルトの名無しさん
2008/01/14(月) 01:28:250322デフォルトの名無しさん
2008/01/14(月) 01:34:13あれって、参照カウンタで管理してるんでしょ?
循環参照したらオワタになるので、素人に使わすと逆に危ないよ。
そもそも、new するシチュエーションってそうそうあるか?
なるべく new を避けて書くのが C++er の嗜みだとおもうが。
0323デフォルトの名無しさん
2008/01/14(月) 01:35:58デザインパターンの半分は使えなくなるんじゃね。
0324デフォルトの名無しさん
2008/01/14(月) 01:37:00もの足りないと思うひとがBoost使ってることが多いだろうね
数万行のコード書いたら1%ってめっちゃでかいと思うんだ
(実際は1%どころじゃないけど)
0325デフォルトの名無しさん
2008/01/14(月) 01:40:10まあ素人に使わせるとそうなることはあるかもしれんな。
0326デフォルトの名無しさん
2008/01/14(月) 01:44:03殆どのインスタンスは、自分の親クラスのメンバ変数として一緒に確保されるから、
大きな new delete が時たまあるだけってのが普通じゃない?
細かい単位で new delete 繰り返すなんてのは、C++ には似合わないと思うが。
そういうふうに書いてくれ、と頼まれたなら仕方ないが。
0327デフォルトの名無しさん
2008/01/14(月) 01:50:130328デフォルトの名無しさん
2008/01/14(月) 01:57:01デバッグだったり、プロジェクトの管理だったりだよね。
Boostってあんまどうでもよくない ?
0329デフォルトの名無しさん
2008/01/14(月) 01:59:20weak_ptr
0330デフォルトの名無しさん
2008/01/14(月) 02:02:09よくない
プログラミングで難しいのには「大量のコードを書くこと」や「難しい処理を実装すること」
は当然あるだろ
だったらコード量が減って、難しい処理を(Boost使わないよりは)簡単に実装できるなら使ったほうがいいんじゃない
0331デフォルトの名無しさん
2008/01/14(月) 02:09:09>プログラミングで難しいのには「大量のコードを書くこと」や「難しい処理を実装すること」
>は当然あるだろ
えーーーー
無いなぁ。難しい処理ってのは、確かに難しいんだけど、
Boost 使ったぐらいでどうこうなるレベルの処理を、普通は難しいとは言わないよなぁ。
Boostって、「うっかりミスが防げるかもね!!」 レベルの話でしょ。
0332デフォルトの名無しさん
2008/01/14(月) 02:16:40しかし、難しい処理の実装は、Boostを使ってもやっぱり難しいよ。
0333デフォルトの名無しさん
2008/01/14(月) 02:28:31>>332が非常に簡潔な答えをくれた。
「面倒くさい」
0334デフォルトの名無しさん
2008/01/14(月) 02:59:04×どうしても使わないと駄目
○メリット大きい・デメリットやリスクが少ないなら使う
まあBoostに限らないけど。
使いこなせる人間がわずかしかいないプロジェクトに導入したりするのはまずいかと。
新しいものを覚えるコストはゼロじゃないよ。
(誰か1人が使うだけで話が完結するならいいかもしれんが)
まあ、各人がBoostを使えた方が開発効率がよいとは思う。
気長に導入しようって話ならいいんでは?
0335デフォルトの名無しさん
2008/01/14(月) 03:31:240336デフォルトの名無しさん
2008/01/14(月) 03:43:360337デフォルトの名無しさん
2008/01/14(月) 04:41:24でも、Boostって何かに特化しているってわけでもないんだよな。
だから使ったところで丸投げできないし、結局あんまブーストしない。
0338デフォルトの名無しさん
2008/01/14(月) 05:07:100339デフォルトの名無しさん
2008/01/14(月) 08:45:01効率上げると言うより無いと効率下がる
いまさらshared_ptrもfunctionもutilityもoperatorsもcstdintも無しで済ませるのは苦痛だ
0340デフォルトの名無しさん
2008/01/14(月) 09:22:08超頻出の Strategy パターンとか、大体 new が必要になるよね。
必要ない事もありはするけど。
shared_ptr や ptr_container があるだけで、メモリ管理がだいぶ楽になる。
0341デフォルトの名無しさん
2008/01/14(月) 10:08:580342デフォルトの名無しさん
2008/01/14(月) 10:11:14使いこなせる人間がわずかしかいないって?(勉強はしないの?)
こういうことだから日本のIT産業は
0343デフォルトの名無しさん
2008/01/14(月) 11:21:35コンテナを渡すといいよ
0344デフォルトの名無しさん
2008/01/14(月) 11:22:59勉強する香具師は少数派
0345デフォルトの名無しさん
2008/01/14(月) 11:22:59ptr_container系はデストラクト時に必ず要素をdeleteする。
嫌ならデストラクト前にdeleteしてほしくないメンバをコンテナから削除しないと駄目。
0346デフォルトの名無しさん
2008/01/14(月) 11:30:29資格さえあれば仕事もついてくるって構図だから仕方ないけど。
0347デフォルトの名無しさん
2008/01/14(月) 11:54:48大体分かりました。
その制限を踏まえて色々考えてみます。
0348デフォルトの名無しさん
2008/01/14(月) 12:43:05普通メンバ変数として確保しておいて、切り替え時にインターフェイス用のポインタを切り替えるだけだな。
いちいち new するとかタコすぎる
0349デフォルトの名無しさん
2008/01/14(月) 12:46:16new した方がいい時も多い。
0350デフォルトの名無しさん
2008/01/14(月) 12:47:26なんかさ、開発効率って、結局そういうところで決まらなくね?
むしろ、>>328 のようなことの方が影響大きいと思うのだが。
0351デフォルトの名無しさん
2008/01/14(月) 12:49:46メモリリークなんて、リソースリークも含めてここ数年出したことねぇなぁ。
設計がおかしいんじゃね?
0352デフォルトの名無しさん
2008/01/14(月) 12:55:060353デフォルトの名無しさん
2008/01/14(月) 13:39:370354デフォルトの名無しさん
2008/01/14(月) 14:48:47メモリコンパクション無しで、しかも参照カウンタで管理だなんて、存在価値なくね ?
0355デフォルトの名無しさん
2008/01/14(月) 14:58:47C++を知らない者はCを知らない (templateはマクロでvirtualは関数ポインタだった)
Cを知らない者はプログラミングを知らない (自明)
対偶を取ろう
プログラミングを知る者はBoostを知っている
0356デフォルトの名無しさん
2008/01/14(月) 15:05:470357デフォルトの名無しさん
2008/01/14(月) 15:07:58だからといって、どうして、「C++を知らない者はCを知らない」ということになるんだ?
普通逆だろ。
「C++のtemplateと仮想関数は、元々はCのマクロと関数ポインタであるので、
C++の元となったCを理解していないと、C++を理解したということにならない。」
となるのが普通だろ。
(自明)とか使ってる時点で釣りなんだろうが。
0358デフォルトの名無しさん
2008/01/14(月) 15:15:50危うく納得するところだった。
こういう詭弁はなんと命名されているのだろうか?個別性質と集合抱合のすり替え?
0359デフォルトの名無しさん
2008/01/14(月) 15:27:01偽: 「C があったから C++ が生まれた。」
真: 「C++ が生まれたのは、C があったから。」
C++の基礎としてCがあるのであって、Cの拡張としてC++があるというわけではない。
「Cの拡張としてC++がある」というのは一見正しそうだが、単なる結果論に過ぎない。
マンガの見すぎ、精神論、文系脳。
ただ単に、「C++の基礎としてCがある」という事実があるだけ。
これがロジカルな思考、現実、理系脳。
0360デフォルトの名無しさん
2008/01/14(月) 16:38:26論理学・集合論的に説明してくれないと.....。
0361デフォルトの名無しさん
2008/01/14(月) 16:43:49表現を簡単にしすぎて誤解しやすい表現になってる気が。
0362デフォルトの名無しさん
2008/01/14(月) 16:51:57どう見ても「理系」の推論方法ではないな。そもそも「理系」という言葉を使う時点でアウトだ。
>>355 は一種のジョークだ。
0363デフォルトの名無しさん
2008/01/14(月) 18:00:430364デフォルトの名無しさん
2008/01/14(月) 18:14:180365デフォルトの名無しさん
2008/01/14(月) 18:19:09Object-COBOLとか
そりゃもう悲惨だからな
0366デフォルトの名無しさん
2008/01/14(月) 20:09:11newの無いc++なんざcとかわらん
0367デフォルトの名無しさん
2008/01/14(月) 20:40:18scoped_ptr
0368デフォルトの名無しさん
2008/01/14(月) 22:11:49scoped_ptr ってあれ一体何に使うの?
スコープはずれたら解放するってんなら、初めからスタックの上に確保すりゃいいんじゃね ?
それともマルチスレッド対策 ?
0369デフォルトの名無しさん
2008/01/14(月) 22:14:15逆に C++ で new とか使いまくるぐらいなら、C++ なんぞ使わずに Java 使えばいいのにと思う。
0370デフォルトの名無しさん
2008/01/14(月) 22:22:28new したポインタを返すような関数から返されてきたポインタを受けるときとか。
>>369
placement new を使った効率的なメモリ管理を選択する事もできるから、
C++ には C++ なりの利点がある。
0371デフォルトの名無しさん
2008/01/14(月) 22:26:50pimplで使う
0372デフォルトの名無しさん
2008/01/14(月) 22:44:36>new したポインタを返すような関数から返されてきたポインタを受けるときとか。
C++ でそんなことするやつ居るのか。
素直に Java 使えよ。
>placement new を使った効率的なメモリ管理を選択する事もできるから、
placement new と smart_ptr って相性悪くね ?
0373デフォルトの名無しさん
2008/01/14(月) 22:47:23>new したポインタを返すような関数から返されてきたポインタを受けるときとか
それはどちらかというとauto_ptrだと思う。
scoped_ptrはswapはできるけど(auto_ptr的な意味での)releaseができないから、
呼び出し側が他の方法でdelete管理をしたい時困る。
>>368
pimplとかfactoryパターンの生成物とか。
0374デフォルトの名無しさん
2008/01/14(月) 22:48:53その程度の理由で乗り換えないし乗り換えられない状況だって腐るほどあるだろうに。
0375デフォルトの名無しさん
2008/01/14(月) 22:50:36って言われたから、じゃぁ Java 使えば ?
って言い返しただけだよ。
0376デフォルトの名無しさん
2008/01/14(月) 22:53:450377デフォルトの名無しさん
2008/01/14(月) 23:01:27auto_ptr は次期 C++ で deprecated になります。
0378デフォルトの名無しさん
2008/01/14(月) 23:12:10ぜんぜん違うから、どこまでいっても平行線
0379デフォルトの名無しさん
2008/01/14(月) 23:18:12リソース管理が面倒。
0380デフォルトの名無しさん
2008/01/14(月) 23:24:05うまくいけば代わりにunique_ptrが入る。
0381デフォルトの名無しさん
2008/01/15(火) 03:24:540382デフォルトの名無しさん
2008/01/15(火) 14:22:110383デフォルトの名無しさん
2008/01/15(火) 18:52:21explicit operator bool() 装備
代入でmoveはできず、std::move()が必要
こんなとこだっけ?
まあ似たようなもの2つあると初心者は混乱しそうだが
0384デフォルトの名無しさん
2008/01/20(日) 11:36:15b の内容全てを a の後ろに移動したいのですが、
そういうことはできますか? 出来る限り簡単な方法で。
0385デフォルトの名無しさん
2008/01/20(日) 12:29:25std::copy とか使えないのかな
0386デフォルトの名無しさん
2008/01/20(日) 13:04:05常に false を返す比較関数を使って merge する方法は思いつきましたが、
何かエレガントじゃないというか・・・。
>>385
コピーじゃなくて移動なんです。
a の最後に b の要素を付け加えて b は空にしてしまう、という形ですが、
内部的には単なるノードのつけかえで実現されるのがベストです。
0387デフォルトの名無しさん
2008/01/20(日) 13:38:590388デフォルトの名無しさん
2008/01/20(日) 15:08:07代わりに transfer というのがありました。
ありがとうございました。
0389デフォルトの名無しさん
2008/01/21(月) 23:08:31http://www.cmake.org/Bug/view.php?id=6257
これでboostのpathをmakeに書かなくてもよくなったのかな
0390デフォルトの名無しさん
2008/01/22(火) 00:26:18|← reject| boostの中の人 singleton ユーザー
. ̄.|| ̄ ̄ ┗(^o^ )┳(`Д´)┳(^o^ )┛≡=-
|| ┏┗ ┗┗ ┏┗ ≡=-
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
0391デフォルトの名無しさん
2008/01/22(火) 01:05:590392デフォルトの名無しさん
2008/01/22(火) 02:08:260393デフォルトの名無しさん
2008/01/22(火) 02:23:18つ配列使わずにコンテナを使う
0394デフォルトの名無しさん
2008/01/22(火) 02:28:240395デフォルトの名無しさん
2008/01/22(火) 02:37:11Boost.Preprocessorにそんなようなマクロがあったような気が・・・
0396デフォルトの名無しさん
2008/01/22(火) 03:12:460397デフォルトの名無しさん
2008/01/22(火) 05:22:38[review] General comment on boost::singleton
http://www.nabble.com/-review--General-comment-on-boost::singleton-td14952506.html
Tobias Schwinger
http://torjo.com/tobias/
これでつか?(T^T)
0398デフォルトの名無しさん
2008/01/22(火) 05:36:26一生孤独でおkwwwwwwシングルトンだけにwww」
俺「\(^o^)/」
0399デフォルトの名無しさん
2008/01/22(火) 06:00:180400デフォルトの名無しさん
2008/01/22(火) 06:27:47完全な、あるいは既知の欠陥がないSingletonライブラリを実装するのはほとんど不可能ってレベルで。
大体BoostでSingletonが蹴られたのってこれで何度目だ?
0401デフォルトの名無しさん
2008/01/22(火) 06:33:150402デフォルトの名無しさん
2008/01/22(火) 09:21:540403デフォルトの名無しさん
2008/01/22(火) 10:47:25ライブラリの提供という点で否定的なレビューが多くあがってた。
作者によると今回の singleton は、スレッド安全な動的初期化と、はっきりした
初期化順や破棄タイミングを提供するらしいけど、否定的な人たちに言わせれば
それらをシングルトンとは関係ない個別の機能として提供すべきだとか、そういう話。
元はこっちの巨大なスレッドね。
http://www.nabble.com/-review--Fast-track-review-of-Boost.Utility-Singleton-begins-today-to14806433.html
0404デフォルトの名無しさん
2008/01/22(火) 12:30:29http://www.boost.org/libs/pool/doc/implementation/singleton.html
やっぱり details 以下のものを使うのは良くないのかなぁ.
0405デフォルトの名無しさん
2008/01/22(火) 12:50:47何でもぶちこみすぎているから分解を検討しましょうってことだよね。
0406デフォルトの名無しさん
2008/01/22(火) 19:45:28グローバル変数よりは随分マシだけどね。
0407デフォルトの名無しさん
2008/01/23(水) 19:02:33struct Foo
{
int var;
};
vector<Foo*> vData;
...vDataの中身をいろいろ埋める
sort(vData.begin(), vData.end(), _1->var < _2->var); ←コンパイルエラー
これって実現方法あります?
これ以上複雑に書かないとだめなら普通に述語書いたほうがいいような気がする・・・
vectorがFooのポインタなのは実装上の理由です。
■ このスレッドは過去ログ倉庫に格納されています