語って.はぁと
VCについてくるようになったら勉強する。
>>2 それってどういうことだ?
VCじゃ使えないと思ってる?
それを言ったらVC付属じゃない外部ツールは皆使えない事になるし。
boostも使いたいんだが、.NETも使いたい
なんで重複スレ立てる
>>1 みたいな馬鹿が減らないんだろうね
6 :
デフォルトの名無しさん :04/07/31 08:40
本スレのタイトルが悪いから
7 :
デフォルトの名無しさん :04/07/31 08:44
boost はどうでもいいから bootstrap について語ろう
ブーブー
9 :
デフォルトの名無しさん :04/07/31 09:13
なつです
最近の2chは常夏だから あんま関係無い
12 :
デフォルトの名無しさん :04/07/31 09:50
ハワイアンテイストの2ちゃんねる
あれ他にもBOOSTスレあるの?
15 :
デフォルトの名無しさん :04/07/31 11:38
ここはネタスレとして継続
16 :
デフォルトの名無しさん :04/07/31 11:39
"BOOSTの"ネタスレとして継続 boost自体、ネタみたいなもんだからな
boost本が積読になってる罠。 spirit は凄いんだが、いかんせんコンパイル速度が orz
19 :
デフォルトの名無しさん :04/08/01 08:13
boostはインテルがスポンサーになってもいいのにな。 開発用マシンに爆速CPUの需要を喚起してくれる素晴らしいライブラリ。 「あなたの開発速度をboostさせるPentium5プロセッサ」 Pen4のエンコード需要なんて、そのうちハードウェアエンコーダが 出てきて一般的になり、CPUは売れなくなると思われ。
>19
インテルもそうしたいのは山々かもしれんが、
64bitWindowsの足を引張るほど猛烈な勢いで失速中なのでw
ttp://japan.cnet.com/news/ent/story/0,2000047623,20070161,00.htm インテル、さらにつまずき--Noconaプロセッサの補助チップに不具合
2004/07/30 20:00
インテル、3.6GHz版のPentium 4が深刻な供給不足に
2004/07/30 11:55
インテル、今度は4GHz版Pentium 4のリリースを延期
2004/07/30 10:44
インテルCEO、度重なる開発の遅れに苦言--従業員の姿勢に疑問を呈す
2004/07/28 14:25
インテル、新型ノートPC用チップセット「Alviso」の投入を延期
2004/07/20 12:27
インテル、Express 915/925チップセットを回収へ--ICH6チップに製造ミス
2004/06/28 10:50
米インテル、次世代モバイルチップ Dothanの発売を延期へ
2004/01/15 16:36
>19
インテルもそうしたいのは山々かもしれんが、
64bitWindowsの足を引張るほど猛烈な勢いで失速中なのでw
ttp://japan.cnet.com/news/ent/story/0,2000047623,20070161,00.htm インテル、さらにつまずき--Noconaプロセッサの補助チップに不具合
2004/07/30 20:00
インテル、3.6GHz版のPentium 4が深刻な供給不足に
2004/07/30 11:55
インテル、今度は4GHz版Pentium 4のリリースを延期
2004/07/30 10:44
インテルCEO、度重なる開発の遅れに苦言--従業員の姿勢に疑問を呈す
2004/07/28 14:25
インテル、新型ノートPC用チップセット「Alviso」の投入を延期
2004/07/20 12:27
インテル、Express 915/925チップセットを回収へ--ICH6チップに製造ミス
2004/06/28 10:50
米インテル、次世代モバイルチップ Dothanの発売を延期へ
2004/01/15 16:36
23 :
デフォルトの名無しさん :04/08/02 08:58
>>20 いやそうなんだけど、テンプレートライブラリ使うと
コンパイルが遅いとか嘆いてる奴の使ってるマシンを
聞いてみると、Pen3-600MHz辺りを使ってることが多い。
もうね。
動画エンコード厨だってそんな馬鹿はいない。
さっさと早いマシン買ってきます。
24 :
デフォルトの名無しさん :04/08/02 09:00
3.6GHzのマシンでなくていいから、3GHzのマシンを用意しろということ。 もしくはAthlon64-3200とか。
今使ってるP42.8GHzでも遅いと感じるのですが、3GHzにすると改善されますか?
なんでもいいからPentiumMのデスクトップ/サーバを出してくれ。 Pen4はうるさすぎ。熱すぎ。
コンパイルにPentium4使ってる香具師ってアフォだろ。 Athlon64使えや。 マルチメディア関係はPentium4もAthlon64も同等レベルだけど、 普通の整数演算はAthlon64の方が速いんだから。
>>27 アフォもなにも、たかだかコンパイルくらいでマシンを買い換えられるわけないだろが。
29 :
デフォルトの名無しさん :04/08/02 09:54
でも Pen4 の遅さには耐えられんべ
775のSocketになって何が変わったの?
マザボ買い換え需要が発生した
あなたのマシン買い換えをboostするライブラリ
まぁCPU買い換えてもっと生産性の高い言語に乗り換えるのも一つの見識ではあるな。
35 :
デフォルトの名無しさん :04/08/02 13:38
そこでMLですよ!
>>28 たった数万の投資で年間の業務が快適になるわけだから、
正直買い渋ってるほうが損してると思われ。
快適になったからといって生産性があがるかというと……。
ねぇ体感で1Gと3Gのコンパイル速度どのぐらい違う? まえに600Mから1.1Gに変えて余り変わらなかったんだけど
RAMDISK1G作って電源入れっぱなしにしておけばちょっぱや
>39,40 んだ。E-IDEでストライプしてたんだけど、CPU上がってなかったからIOとは思ってた. RAMDISKにしてCPU早いとまじはやくなる?
マジレスするとSDRが原因 HDDアクセスがあるってことは容量も足りて無さそう
タスクマネージャを最小化してタスクトレイにメーター表示しておくといいかも。 処理が重いときメーターが振り切ってればCPUが、振り切ってなければ (ディスク)IOが遅い、またはスワップしているということが大まかに分かるよ。
ってWindowsスレじゃなかったな。 VCの場合Releaseビルドだと最適化でCPUが、 Debugビルドだと各種デバッグ用ファイルの出力でIOがネックになることが多いね。
>42 SDRってめもりのこと?めもりもそのときは512Mでまぁまぁあまってたんだけど とにかく書いてるから遅いってかんじではあった
boostを使うつもりが boostに使われてるってなことになりそうで 怖いのでまだ使いません。
あなたはC++に使われてます
Boost library本買ったら著者が俺と同い年だった。 …軽く打つになった。ハァ。
49 :
デフォルトの名無しさん :04/08/13 11:39
ネタスレあげ
まあ、いいじゃん遅いのはコンパイル時なわけで。 開発用のマシンぐらいせめて言いの使えば。 実行時におそく、全ユーザーのマシンにまで 高性能を要求しちゃう某言語よりはましでしょ。
spilitは実行時もflex+bisonより何十倍も遅かったりする
>>51 そりゃそうだけど、spilitにはBNFlikeな構文で
直接ソースに記述できるとか、動的なparserを
生成しやすいとかいろいろメリットがあるのでは?
それらのメリットに対するコストが実行時であるよりも
コンパイル時のほうがましでしょって事。
インターフェースも最近BOOST特集やってたぞ。
組み込みでもBoostが使われる時代になったか
組み込みだと「コンパイル時解決」が嬉しいしね。
組み込みのウンココンパイラでboostなんてコンパイル通るのか?
g++でしょ? docomoの端末もg++みたいだよ。 そういえばembeded C++ってのはどうなったんだ?
携帯はもはや組み込みでは無い。 今の組み込みは情報家電とか車載コンピュータ
え、車載も今はネットワーク(ベンツ仕様?)があって、大変だよね。 携帯端末の方が電源の縛りが合って軽くないかな。 あれ、これスレ違いだな。
spiritはLL(\infty)パーザらしいね. ANTLRとか,LL系の復活の兆しだろうか. shared_ptrくらいならともかく,spiritになるとコード読んでもどこが何の処理なんだかも分からない... 「C++はCにオブジェクト指向の拡張を施したもの」っていう紹介止めようぜ. 最近のC++の流れ,テンプレートメタプログラミングは,OOPとほとんど関係ないし.
spiritは構文木ベースで使うのと、 アクションベースで使うのどっちがいいの? 大規模になるほど構文木ベースの方が分かりやすいような気がする
ワンパスでいいなら、アクションでやってもいいでしょ。
>>62 釣りか?最近の流れっつけど、ぜんぜん主流じゃないし。
話題は多いけど、OOPLとしての用法があくまでベースだ。
おまえが興味を持って意図的にそっち方面の情報を目にしてるだけだろ。
namespace boost { namespace spirit { この書き方いいね。
>>65 なんかBoostのスレらしからぬレスに思えるが... 感じ方は人各々だけどね.
で
「作って分かるBoost C++テンプレートメタプログラミング」 刊行マダァ? > 誰かエロいひと
68 :
デフォルトの名無しさん :04/11/01 17:46:43
boost::socket マダー?(AA略
1.32はなんか問題でも見つかったのかな?
KNOWN ISSUES ------------ The following is a list of known issues present in the tarballs which grant them their draft status: 1) A small number of unmarked test failures (but no regressions). 2) A small number of broken links as follows: doc/html/date_time/doxy.html: broken link: ../../../boost/date_time/dst_transition_day_generators.hpp, broken link: ../../../boost/date_time/local_time_base.hpp doc/html/date_time/posix_time.html: broken link: ../../../libs/date_time/doc/time_duration_inherit.png doc/html/libraries.html: broken link: ../boost.pdf libs/libraries.htm: broken link: ../boost.docbook, broken link: ../boost.fo, broken link: ../boost.pdf libs/numeric/conversion/doc/converter.html: broken link: udt_support.html libs/numeric/conversion/doc/converter_policies.html: broken link: udt_support.html 3) No documentation in PDF format ("boost.pdf"), due to some build issues (I'll post separate email on this). 4) Placeholder pages in place of the revoked pre-1.32 MPL documentation. If you encounter any issues that are not in the above list, please report them here!
いつのまにかboost100%のコンパイラが、 icc-8.0,icc-8.1 CodeWarrior-9.3 の3つに変化してるね。
良く見たらVC-7.1も100%だったわ。
全部100%なのはWin版だけだけどな。
いつの間にか-sTOOLS=vc7.1が-sTOOLS=vc-7_1になってるのに気がつかず ビルドに1日ハマってしまった orz
76 :
デフォルトの名無しさん :04/11/02 14:02:26
boost::socketまだかよ! 早くしろよ。 どうでもいい更新ばっかしやがって
WxWidgetsとSDLとBoostとSTLがあればほとんどのプログラムが作れそうな予感
で、コンパイラとIDEはどうしますかと。
emacsで十分。
hexl-modeで十分
エディタ?何言ってんだ?
紙テープで十分
原始時代からいらっしゃった方ですか?
原始時代?何言ってんだ?
何言ってんだ?何言ってんだ?
20年前位までは紙テープリーダーでメインフレームにデータ入力してた、そんな時代もあった。
bjamって重いよね。 まあantはもっと重いけどさ
boost.serlializationコンパイルしたら libファイルが20MB近くあるぜ。カコイイ。
bccじゃserializationも動かないじゃないかヽ(`Д´)ノ ウワァァァン
>>93 BCCにこだわるならboostは諦めろ。
だから、boost::socket早く実装しろと言ってるだろ! あれが無いと困るんだ! いつまで俺にWinとLinuxのコンパチソースを書くときに毎回#ifndefとかウザいの書かせるんだ。
え、なんでBCCでserlialization使えないの?
>>95 別に待ってなくてもいいんだよ
contributeしたら?
bjamでboostbuildする時プリコンパイルヘッダ使って欲しい
100 :
デフォルトの名無しさん :04/11/04 15:07:56
boostの項目別に使い方を解説した辞書形式の日本語の本って無いですかね?
101 :
本田 :04/11/04 15:26:39
>>98 オープンソースを、自分の使っている処理系用に、
カスタマイズできない人も、ハイレベルじゃない。
102 :
デフォルトの名無しさん :04/11/04 17:08:33
boostが標準で使えるコンパイラを教えてください
そ、それは…
>>105 THXです。
早速amazonで注文してみます。
>>100 新しく紹介本を書く予定です。ドゾヨロシク
「ウホッ!いいboost やらないか?」
こんなところでウホッとか書いて大丈夫か? もしかしてエピ公?
反応してんじゃねーよ
weekendはまだですか?
世界のweekendはまだです
誰がブスなのよ!?
uBLAS ってどう読むの?
117 :
デフォルトの名無しさん :04/11/07 16:57:00
118 :
デフォルトの名無しさん :04/11/07 17:48:28
boost の thread を使おうとしているのですが、 ビルドして実行すると, boost_thread-vc71-mt-gd-1_31.dll が見つからなかったため、 このアプリケーションを開始できませんでした。アプリケーションを インストールしなおすとこの問題は解決される場合があります。 というメッセージが出てしまいます。どうしたらよいのでしょうか。 環境は WindowsXP VC7.1 です。
アプリケーションをインストールしなおすとこの問題は解決される場合があります。
120 :
デフォルトの名無しさん :04/11/07 17:55:18
>>119 この場合のアプリケーションは boostのことをさすのでしょうか。
一応、....vc7\lib フォルダの中に boost_thread-vc71-mt-gd-1_31.dll ファイルは
見つけられるのですが。。
regsvrでだめなら全部入れなおしたらー
>>120 パスが通ってないライブラリをどうやってOSが見つけられるというのだ
dllを実行ファイルと同じフォルダに入れてください
124 :
デフォルトの名無しさん :04/11/07 19:19:31
boostユーザってこの程度かwww
茶化すつもりはないが、boosl使う以前の問題だと思う。 でも、たぶんプログラム初心者なんだろう。その中でboostを使おうとするその心意気やよし。
>>126 × プログラム初心者
○ プログラミング初心者
どうしたらboosl使えるようになれますか?
怪獣boost なんちゃってなんちゃって
weekendはまだですか?
世界の終末はまだです
┐(´〜`)┌
アメリカがファルージャを空爆しまくってるので世界の終末は一歩近づきました。
>>133 ブッシュが再選したので世界の終末が一歩進みました。
一つ大きな問題を発見してしまった。 それは、世界の終末にリリースされても、 使う暇がないのでは無いだろうかという事だ。
2046
アラファトが死んだので世界の終末が一歩退きました。
weekendって曲がエンドレスで頭の中でかかってます
がぁん……weak_ptrのget()て無くなったのね…… プログラム直さなきゃ……
weekendまだ―
もうちょっと待って!!
142 :
デフォルトの名無しさん :04/11/16 10:07:35
boostをvcに入れるにはどうしたらいいのでしょうか?
レイプ
>>142 「boost インストール」でググって見る。
もう17日過ぎちゃったよママン
146 :
デフォルトの名無しさん :04/11/18 00:09:25
Rubyに乗り換えて幸せ。
boostかRubyかっていう選択肢だったのか?
rubyはネタ言語
boost、それは忍耐
boost、それは夢 // 本出たね。Depthシリーズで。
151 :
デフォルトの名無しさん :04/11/19 09:53:56
boostはみんなCVSで更新してるから、リリース版なんて どうでもいいって思ってるんじゃないの?<中の人 リリースするとバグだなんだっていろいろ言われて ウザイだけだし。CVSならそのときにすぐ対応できるしね。 というわけで、CVS版をゲットしてメーリングリストにも 入って開発の流れをよく見るべきですな。
1.32は結局出ませんでした
154 :
デフォルトの名無しさん :04/11/20 13:46:15
Latest News November 19, 2004 - Version 1.32.0
>154 ネタはもう良いって( ´,_ゝ`) プッ
1.32.0 キタ━(゚∀゚)━( ゚∀)━( ゚)━( )━(゚ )━(∀゚ )━(゚∀゚)━!!!!
自分は今ビルド中 うはー夢が広がりんぐ
borlandでのSerializationのビルドの成功した方いらっしゃいますか? libs/serialization/doc/release.html#Platforms を参考にSPIRIT_ROOTを設定してbjamを実行しているのですが、 borland-C++-action bin\boost\libs\serialization\build\libboost_serialization.lib \borland-5_6_4\debug\runtime-link-static\xml_grammar.obj E:\boost_1_32_0\libs\serialization\build\../src/xml_grammar.cpp: 致命的エラー F1003 E:\boost_1_32_0\boost/spirit/core/config.hpp 56: error 指令: "Compiler not supported. See note in <boost/spirit/core/config.hpp>" *** 1 errors in Compile *** "bcc32" -j5 -g255 -q -c -P -w -Ve -Vx -a8 -b- -DBOOST_TEST_NO_AUTO_LINK=1 -v -Od -vi- -tWC -WM- -DBOOST_ALL_NO_LIB=1 -w-8001 -I"bin\boost\libs\serializ ation\build" -I"E:\spirit-1.6.1" -I"E:\boost_1_32_0" -o"bin\boost\libs\serial ization\build\libboost_serialization.lib\borland-5_6_4\debug\runtime-link-static \xml_grammar.obj" "E:\boost_1_32_0\libs\serialization\build\../src/xml_grammar. cpp" ...failed borland-C++-action bin\boost\libs\serialization\build\libboost_seriali zation.lib\borland-5_6_4\debug\runtime-link-static\xml_grammar.obj... borland-C++-action bin\boost\libs\serialization\build\libboost_serialization.lib \borland-5_6_4\debug\runtime-link-static\xml_iarchive.obj E:\boost_1_32_0\libs\serialization\build\../src/xml_iarchive.cpp: 致命的エラー F1003 E:\boost_1_32_0\boost/spirit/core/config.hpp 56: error 指令: "Compiler not supported. See note in <boost/spirit/core/config.hpp>" *** 1 errors in Compile *** っていわれちゃって。 どうも、元のboostを見に行っているらしく。
BCCなんか捨てちゃえ
やっぱ隔離スレは格が違うね
167 :
デフォルトの名無しさん :04/11/21 14:44:43
boostを勉強したいのですがよい本を教えてください
できるboost
>>167 boostの何を勉強したのか言って無いから範囲広すぎ
170 :
デフォルトの名無しさん :04/11/21 14:50:40
Boostの使いこなしはBOOST_PPから始まるといっても過言ではないな。 C++の勉強よりも前に、Cでこれを十分使いこなしてからC++に移行するのが正しい。
Let's boostあたりで一通りどんなことが出来るのか目を通しておいて 実際に使いたくなった時に該当箇所を詳しくリファレンスで見るだけで十分
やさしいboost
>>167 boostの前にC++の勉強を真面目にしたほうが良いと思う。 Scott Meyersの
Effectiveシリーズあたりがいいかな。 オブジェクト指向プログラミングと
テンプレートの使い分けとか、C++固有の作法とか知らないとboostは使い
こなせない。 STLもだけど。 boostはかなりマニアックなライブラリもあるので
必要なものだけピックアップして使えばいい。 Modern C++ Designにあるような
テクニックは実際には使うべきではないと思う。 あまりに複雑すぎるし、途中で
破綻しているものもある。
174 :
デフォルトの名無しさん :04/11/21 17:25:47
るby>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ぼおst
STLを勉強してからboost::shared_ptrやboost::bindと併せて使うといいと思います。 ていうか私もformatとこれら3つぐらいしか使ってない・・・
>>173 >Modern C++ Designにあるような
>テクニックは実際には使うべきではないと思う。
テンプレートライブラリを書こうと思うなら必須のテクニックなのでは?
またアプリケーションをテンプレートライブラリを作るかのように、
書くためのポリシーというテクニックを使いこなすためには、あの本のテクニックは
欠かせないですね。まあ私は使{い,え}ませんけど。
178 :
52 :04/11/22 01:19:36
CVSスレでやったようなネタはもういいって。
boostマスターズクラブ
>>176 あの本はマニアック過ぎて。 もちろん使えるものもあるけど。
メモリーアロケータとかってデフォルトのnew演算子より遥かに遅かったりして。
シングルトンもなーんか訳わかんないし。 実際あの本をちゃんと判っている奴は
ほとんど居ないんじゃないか? 折れの指導教官も日本でソフトウェアエンジニアリング
をちゃんとわかっているやつは数えるほどしか居ないって言ってたし。 著者が
そのレベルまで達しているかは判らん。
あとC++を勉強するときにはエラーハンドリングもちゃんと勉強しておいた方がいい。
エラーハンドリングをちゃんと扱える奴ってあんまりいないからな。 そこらへんは
Exceptional C++に病的なくらいクドクドと書いてあるが。
184 :
デフォルトの名無しさん :04/11/22 09:40:16
あれくらいで大騒ぎとはよほどC++ユーザーって少な(ry
bjamでboostビルドするとベンチマークに出来そうな位時間かかるな。
bjamでビルドするとNTFSだとハードリンクしてくれて頭(・∀・)イイ!
VCtoolkitだとdate_timeとregexがコンパイル通らないのは漏れだけ? VC6だと通るから謎すぎる
ここはcppllの遅延付ミラーですか?
190 :
デフォルトの名無しさん :04/11/24 14:39:09
boostにはソケット関連のライブラリは無いのでしょうか。
>>190 boost::socket なるものは存在するけど、
CVSでもsand-box扱い
192 :
デフォルトの名無しさん :04/11/24 14:47:33
boostは、C++のコンパイラを入れると必ず入っているのでしょうか。
入ってない
194 :
デフォルトの名無しさん :04/11/24 15:12:54
boostは、あるクラスだけ取り出して組み込むということはできますか?
ここは隔離スレ
結局boostは、一生かかっても標準ライブラリにはなれないんですね。
一部は次期標準に入るそうですよ
標準に入ればGCCやVCのSTLにBoostの一部が含まれるってことだよな?
そういうことになるね
1年後boostは、C++のコンパイラを入れると必ず入っているのでしょうか。
boostが標準になる頃はもうC++なんか見向きもされなていないだろうなwwww
205 :
デフォルトの名無し :04/11/24 21:25:55
BoostをWideStudioで使いたいのですが、インストール方法をご存知な方いませんか?
>>202 いれてあるよ。
ていうか1.31は全部通ってたしそういう問題はないと思う。
と、いまやり直したらregex通って代わりに
serializationが通らなくなった。
ワケワカンネェ
アァン、boost::lambda遅すぎですよ? 普通にforループでイテレータ使うのに比べて、10倍も遅いってどういうこと。
>>210 thx。
そもそも-O3以上だからinline展開は当然されてるよな? と思ったが、アセンブリ出力を見るに
do_nothing()をcallしてる模様。
ライブラリに手を入れるのはパッケージが更新されたときに面倒そうだけど、お試しでやってみた。
...
わーお、書き換える前は11倍だったのが、7倍にまで短縮された。
5倍くらいにまで縮んだのもあるよー。
ごめんなさい、嘘吐いてました。
boost::lambdaのところだけ、その前のテストに使ってたstd::sort()が挟まってました。
std::sort()を抜くと、ほとんど差はありませんでした。
lambdaの中の人ごめんなさい。
210の人ごめんなさい。
>>1-1000 生きててごめんなさい。
追加。 単純なlambda式の場合、イテレータよりも早いです。
GentooにBoostこねーーーーーーー
boostなんて自分でいれればいいじゃん
ebuildなんて使わなくてもbjam使えばいいじゃん
operatorsが気に入った。
Named Parameters Libraryがrebiewとおったか。
220 :
デフォルトの名無しさん :04/12/11 13:42:26
1.31と1.32のebuildを比べたら、 ./tools/build/jam_src/bin.linux${arch}/bjam -j2 \ (1.31) ./tools/build/jam_src/bin.linux/bjam -j2 \ (1.32) と${arch}が抜けています。 work以下のファイルを見ればtools/build/jam_src/bin.linuxx86/以下に jam,bjamが生成されているので、これでは上手くいきません。 1.32のebuildを1.31のように修正(2箇所)したら上手くいきました。一応報告。
ごめん訂正。${ARCH}と大文字でないとだめずら。何度もスマソ。 1.31はなんで上手くいくんだろ。わけ分らん。
前に FileSystem 使ってみたけど日本語ファイル名で問題があった覚えが。 いま、どーなってんの?>そこら辺。
>>224 少し前にcppllに流れてたねその話。
俺はboost::filesystemが責任を持ってwstringで返すのが正解だと思うよ。
Lokiの機能はBOOSTで全部カバーされてるの?
typelistあったっけ
>>226 全然。
singletonとかabstractFactoryなんかはない。
>>227 boost::mplにリストがある
230 :
デフォルトの名無しさん :04/12/21 14:28:34
ところで次のC++の標準化っていつごろになるんでしょうか?
>>230 ISOの改訂が5年おきだから、次は2008年じゃないかと
次の改訂に入るのが確定しているboostの機能一覧ってどこでしたっけ? どこかで見かけたんだけど、忘れてしまった。
あれ、Regexも入るのか?
>>233 ありがとう。
bind入るのか。なんか間違ってる気がするが……。言語の方でサポートするべきでは。
randomは嬉しいなぁ。自分で入れなくて済む。
>>235 そうか?ライブラリで出来る事はなるべくライブラリにやらせた方が良いと思うけど。
個人的にはfunctionが嬉しい。
>>236 全部を言語でやれって言ってるんじゃなくて、
template<class A1> class list1
template<class A1, class A2> class list2
...
template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> class list9
bind.hppでこういうことを書かなくて済むようにしてもらいたいなーってこと。
boost.arrayも標準に欲しいのだが……
vectorあれば十分じゃん
Tupleが標準に入ると戻り値だらけの糞コードが増えそうだな
>>237 なるほど。
でもboost::preprocessor使えば簡単に生成できる訳で…
>>241 じゃあboost::preprocessorも標準に入れちゃえばいいわけか。
# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_1(s, p, o, m) 0
# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_2(s, p, o, m) 0
...
# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_256(s, p, o, m) 0
……preprocessorの方がひどいやん。
大文字で長ったらしいのやめてほしい
>>243 何のためにそうなっていると思っているんだ?
大文字が好きだからだろ
boost本は買う価値ある?
魏末晋初の丞相ほか高官を歴任した
>>246 使い方をAPIレベルでざっと知りたいなら、財布と相談して買うか決めれ。
Boost内部のしくみや応用/実践的な使い方が知りたいなら、そういう本ではないので。
本当に使いこなしたいなら、ソース読むしかない
boostを言語仕様に取り込んだ新言語作ればいいのに。 字面汚すぎ。
>>250 そんな事をしたら、ただでさえ規模の大きなC++よりも、もっと規模の大きな言語が必要にならないか?
252 :
デフォルトの名無しさん :04/12/23 01:48:10
rubyさいこー
>>251 無名関数とプリプロセッサの制御構造があれば、かなりいけるんじゃない?
254 :
デフォルトの名無しさん :04/12/23 02:57:58
ブーストポッド作動 エンジン臨界点までカウントスタート
>>248 そういう本かWEBサイトない?日本語で。
英語読めない香具師って損だね
英語が読めないならソースを読めばいいのにな
>>257 自然言語の説明を読めば方針が解かって、ソースを読む手助けになる。
無名関数がどうのって、そこまで無名関数が使いたいならLisp使えよ。 さもなければ、camlかな。camlはCほどではないがC++よりは速いらしいよ。 オブジェクト指向でプログラミングしたければOCamlもある。
いやそうぢゃなくて、C++の機能や資産はそのまま使いたくて しかもそれに加えて無名関数とかも使いたいっていうことな んじゃないの?
痛い人は放置の方向で。
>>258 公式ページを翻訳かければ良いじゃん。
最近はweb翻訳があるから英語サイトなら直訳の駄文を更に意訳すれば大抵のサイトは読める。
そうだね
>>262 英語は自然言語の部分。
日本語は自然言語の部分。
朝鮮語は(ry
意図が読めないぞ
ハングルから日本語への機械翻訳が的確すぎる件について
>>266 ハングルは文字ですが……。
普通は朝鮮語。
公共放送NHKでハングル講座という番組名で放送している件について
>>268 その話を持ち出してくるって事は、あらすじ知ってるんだろう。
ここboostのスレッドだから、その話は別のところでやっとくれ。
270 :
デフォルトの名無しさん :04/12/25 09:35:24
BOOSTをMacのCodeWarriorでコンパイルした人なんて いないでしょうか… OS Xのgcc用にはbjamがあるので簡単なんだけどCW用 にはbjamがないのでどうしたらいいか誰か知りませんか?
>>269 俺はハングル講座で勉強していたが、いつも疑問に思っていた。
知ってるなら話の経緯を教えてくれ。
ハングルって文字だったのか。 日本語でいうカタカナ、ひらがな、のようなモノか? カタカナ講座、ひらがな講座、…ありえなくはないんじゃないか
朝鮮語を表すために作られたのがハングルだろ。 それにハッカーが誤用で悪の烙印を押されてるこんな世の中でNHKの番組名が「はいそうですか」とあてになるわけ無いだろ。
そろそろうんこしてシャワー浴びて出かけるかな
>>271 期毎の初回に小倉がやんわりとした説明してるけど、
要は「朝鮮語講座」もしくは「韓国語講座」っていうと北韓国もしくは南朝鮮な連中がギャアギャア騒ぐから、
ヘタレなNHKは「ハングル講座」って名前にして逃げてるってだけの話。
なるほどBOOST!(w
>>276 北朝鮮なんかまともな国じゃないんだから放っておけば良い。
BOOSTなんかまともなライブラリじゃないんだから放っておけば良い。
C++なんてまともな言語じゃないんだから放っておけば良い。
さっさとC++の代わりとしてD言語が普及すればいいのだが いつになるのやら…
おまえが現役の間は無理
C#でいいやん
285 :
デフォルトの名無しさん :04/12/26 12:51:17
Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> C# >>>>>>>>>>>> Java
BOOSTってDelphiで使えませんか?
boostは死ぬほど貧弱なC++のライブラリを どうにか並程度まで引き上げる為のものだから 最初から超強力なライブラリを備えたDelphiにはそもそも不必要だよ。
>>281 boostを一からD言語用に書き直してもまだお釣りが来るくらいの未来。
せめて string algorithms library が時期標準に入ってくれればなあ
そもそもその次期標準っていつくるねん。
2009年
2008に一票
その前にC++が使われなくなってる予感!!
>>294 と、C++もBoostも全く理解できないアホが吠えております。
>>295 は新しいことにチャレンジ出来ない年齢です。
ワラ
let's boost が… > XML error: not well-formed (invalid token) at line 38
見えてるけど…?
ニュース
本当だ_| ̄|○
VisualStudio 2005でboostはコンパイルできますか?できるんなら2005買おうと思ってるんですが、とりあえず今のExpress版で動かした人います?
2005うってないし
306 :
デフォルトの名無しさん :05/01/16 14:20:34
307 :
デフォルトの名無しさん :05/01/16 14:22:19
306:デフォルトの名無しさん:05/01/16 14:20:34
>>305 Betaってうってるんですか?
308 :
デフォルトの名無しさん :05/01/16 14:22:47
307:デフォルトの名無しさん:05/01/16 14:22:19
306:デフォルトの名無しさん:05/01/16 14:20:34
>>305 Betaってうってるんですか?
309 :
デフォルトの名無しさん :05/01/16 14:23:19
308:デフォルトの名無しさん:05/01/16 14:22:47
307:デフォルトの名無しさん:05/01/16 14:22:19
306:デフォルトの名無しさん:05/01/16 14:20:34
>>305 Betaってうってるんですか?
久々にスレが伸びてると思ったら、これかよ。
311 :
デフォルトの名無しさん :05/01/16 14:31:34
>>303 はExpressのbetaで動くなら製品版も買おうと思ってるって意味だろ
314 :
デフォルトの名無しさん :05/01/19 05:01:43
boostってライブラリとしてはもうネタ切れ? これからはいかに活用していくかってことを皆考えてるの?
皆って誰のことよ
ブースと野獣
うひょ.typeofレビュー待ちキューに入ったのか.
struct Parent { shared_ptr<Child> pChild; SetChild(shared_ptr<Child> p); }; struct Child { weak_ptr<Parent> pParent;
すまんしくじりました。 ↓のように親が子供をもつんだけど、子供からも親へのバックポインタを もつ場合の話です。 class Parent { shared_ptr<Child> pChild; public: SetChild(shared_ptr<Child> p); }; class Child { weak_ptr<Parent> pParent; SetParent(shared_ptr<Parent> p) { pParent = p; } friend Parent; } Parent::SetChild(shared_ptr<Child> p) の中から Child::SetParent() を呼ぶ必要があるのに 呼び出せなくて困ってます。(shared_ptr<Parent>(this) とかやりたい・・・) ってことで今は メンバ関数はあきらめて、↓のようなスタティックメンバ関数用意してます。 Parent::SetChild(shared_ptr<Parent> pThis, shared_ptr<Child> p) { pThis->pChild = p; p->SetParent(pThis); } 他にうまい手があったらどなたかご教示ください。
>>320 一応boostでは
#include <boost/enable_shared_from_this.hpp>
class Parent : public enable_shared_from_this<Parent>
としておけば、
SetChild(shared_ptr<Child> p) {
pChild = p;
pChild->SetParent(shared_from_this()); // shared_ptr<Parent>(this) を生成
}
と書けますが、shared_from_thisが有効なのは、呼び出し元のオブジェクトからweak_ptrが生成できる場合
(shared_ptr<Base>からの呼び出し)に限ります。
Parent p;
p.SetChild(...); // bad_weak_ptr
shared_ptr<Parent> p(new Parent);
p->SetChild(...); // OK
使い勝手は良くないですね
>>321 情報サンクス。
enable_shared_from_this の実装みて感動しました。
自身を指すweak_ptr をメンバで隠しもってるんですね。
頭いいなあ。
仕事で作るソフトにboost使ってるやついる? STLは正式に標準仕様に加えられたから遠慮なく使えるが Boostはどうなのよ
>STLは正式に標準仕様に加えられたから遠慮なく使えるが そうでもないよ
外部ライブラリを必要とするやつは使ってないけど スマートポインタ等は一部で使ってる
>>323 使ってるよ。
次期標準ライブラリです。
と言ったら使わせてくれた。
時期標準でなくとも使えるものは使ったらいい
上司が石頭で使わせてもらえない場合もあるだろ 将来性のあやしいサードパーティー製のライブラリなんかよりは ずっといいとおもうのだが、毛嫌いする会社もある
329 :
デフォルトの名無しさん :05/01/27 03:15:11
boost を bjam でコンパイルすると巨大なライブラリファイルがいくつも 出来ますが、libboost_filesystem でも、 mt やら sd やら 1_32 やらが色々 名前の後に付いている物が色々出来ますが、これらは一体どう違うのでしょう? mt はきっと multi-thread なのかなぁとかは思うのですが、他が何の事やらさっぱり…
boost1.32をMetrowerks CodeWarrior for Windows v8.3でinstallする 場合についての質問です。 installするとライブラリがすべて-cw-の名前になるにもかかわらず、 -cw8-でリンクしようとするのは何故ですか?bjamの設定ファイルの バグでしょうか?教えてください。お願いします。
332 :
デフォルトの名無しさん :05/01/27 07:59:42
signalsのシングルスレッド版がdll,staticlink用libともに生成されないのですが こういうものなのでしょうか? 引数は以下の通り渡しました bjam -sTOOLS=vc-7_1-stlport "-sBUILD=release debug <runtime-link>static/dynamic <threading>single/multi <native-wchar_t>on" stage
signalsの処理にスレッドが必要なので
1.3.2をmingw(gcc-3.4.2)でビルドすると共用ライブラリが作られませんが、これは正しい結果でしょうか?
335 :
デフォルトの名無しさん :05/01/28 21:37:46
boost1.32のserializationを使いたいのですが、ライブラリビルド時に下記のようなエラーが出ます。 コマンドは bjam -sTOOLS=vc7 "-sBUILD=release debug <runtime-link>static/dynamic <threading>single/multi <native-wchar_t>on" stage でビルドしてます。serialization以外は上手く行くんですが、何故なんでしょうか? よろしければ、助言お願いします。 //------------------------------------------------------------------- // ビルドエラーメッセージ //------------------------------------------------------------------- ...failed vc-C++ bin\boost\libs\serialization\build\libboost_wserialization.lib\ vc7\release\threading-multi\xml_wgrammar.obj... vc-C++ bin\boost\libs\serialization\build\libboost_wserialization.lib\vc7\releas e\threading-multi\xml_wiarchive.obj xml_wiarchive.cpp C:\mssdk\boost_net\boost\spirit\core\config.hpp(56) : fatal error C1189: #error : "Compiler not supported. See note in <boost/spirit/core/config.hpp>" "cl" /Zm800 -nologo /EHsc -c -DNDEBUG -DNDEBUG -DBOOST_TEST_NO_AUTO_LINK=1 /Ogity /O2 /Gs /Ob2 /EHsc /GR /MD /Op -Gy /Zc:forScope /Zc:wchar_t -I"bin\bo ost\libs\serialization\build" -I"c:\Program Files\Microsoft Visual Studio .NET\ VC7\include" -I"C:\mssdk\boost_net" -Fo"bin\boost\libs\serialization\build\li bboost_wserialization.lib\vc7\release\threading-multi\xml_wiarchive.obj" -Tp"C: \mssdk\boost_net\libs\serialization\build\../src/xml_wiarchive.cpp" ...failed vc-C++ bin\boost\libs\serialization\build\libboost_wserialization.lib\ vc7\release\threading-multi\xml_wiarchive.obj... ...skipped <@boost!libs!serialization!build\libboost_wserialization.lib\vc7\rele ase\threading-multi>libboost_wserialization-vc7-mt-1_32.CMD for lack of <@boost! libs!serialization!build\libboost_wserialization.lib\vc7\release\threading-multi >xml_wgrammar.obj...
>>335 > Compiler not supported. See note in <boost/spirit/core/config.hpp>
337 :
デフォルトの名無しさん :05/01/29 22:05:21
boost::threadって使い物になる?
>>337 ウェイト入れても、CPU負荷が高めかも
漏れのやり方が悪いだけだろうか…
337へのレスが338になる状況が想像できないのは俺のせい?
boost::filesystemもウンコだし、最近のboostは質の低下が著しいな。
>>340 だったらお前が作れ…ってそんなことしたら余計悪くなるかww
つーか、Boost の環境依存部分て基本的に Posix 文化が強いから。 それを Windows に当てはめようとしてイロイロ無理している感じ。 いっそのこと、.NET Fw か、Java のライブラリみたいにすればいいのではとも思う。
BOOSTは別にWindowsのためだけにあるわけじゃないだろ。
いかん、net FireWall って無意識に読んで、何の話なんだろうと思ってしまった。
しかしUNIX屋はC++をあまり使わないというジレンマ
Windowsのfile systemがウンコなところを、 boost::filesystemに持ち込まれても困る。
347 :
デフォルトの名無しさん :05/01/31 21:21:39
WindowsだとSleepでUnixだとnanosleepだったりしてイヤーンな感じですが、 boostにportableでミリ秒単位以上の性能があるsleepは無いですか?
ちなみに、ミリ秒単位以上の性能と言っても、 スレッドとかプロセスコンテキストで20msくらい余分に待たされたりしますとかそういうのはOKです。 でも1秒は途方に暮れるほど長すぎるかも…
>>343 Windowsが圧倒的なシェア持ってるんだからしょうがない。
Linux板でシェアを増やそうというスレを見ていると、
LinuxはGUIを改善するべき→
GUIなんていらん。CUIの方が効率的→GUIは初心者に必要
→初心者なんてLinuxにはいらん→シェアを増やすには初心者が必要
→シェアなんて増える必要ない
という必ず不毛なネガティブループに陥ってるんだよなぁ。
boost::socketってまだ使えないんですか?
sandbox扱い
おいおまいら、boostロゴコンテストですよ
2005 Expressでboost使ってみました。 "let's boost" の"spirit"のサンプルを試したら、 「windows.hが見つからない」というエラーが出たので、 file_iterator.ipp 内で #include <windows.h> するのを抑えるために、同ファイル内で #undef BOOST_SPIRIT_FILEITERATOR_WINDOWS したら通ったのですが、根本的な解決になってない気が。。。
>>355 すみません今後気をつけます。
おかげさまで解決しました。
ありがとうございました。
357 :
デフォルトの名無しさん :05/02/23 15:41:20
Microsoft Visual C++ Toolkit 2003にboostをインストールしようとしているのですが、bjamのオプションはどのようにしたらよいのでしょうか?
359 :
デフォルトの名無しさん :05/02/24 07:15:45
C++Builderに bjam "-sTOOLS=bcb" --prefix="C:\Program Files\Borland\CBuilder6" install でインストールしたところ、インクルードファイルのフォルダが Include/boost-1_32/boost/ となってしまったのですが、 Include/boost/ にインストールするにはどうしたらよいのでしょうか? それともこれは正常なのでしょうか? いろいろなサンプルを見ると #include <boost/random.hpp> の様になっているのですが・・・。
例えば C:\Boost\include\boost-1_32\boost にインストールされてるとして、IDEの設定もしくはMakefile等で C:\Boost\include\boost-1_32 をインクルードパスに追加しとくと #include <boost/random.hpp> でインクルードできる。 それがいやなら手動で好きなとこにコピーしとけ。
354さんへ 私も2005 ExpressにインストールしようとしたのですがbjamのsTOOLSにどのようなオプションを渡せばよいかわかりません。 2005はvc8ですが、vc8はbjamが「こんなパラメータしらんわ!」といいよるし、 2003と同じくvc7.1でやろうとすると、「vc7.1と違うだろうが!ゴラァ!」と突っ返されます。 インストールオプションをおしえてくだされ。
人にきくより自分でソース見た方が早いと思うぞ。
>>361 -sTOOLS=vc-8_0 でどうだね。
STLport-4.6.2 + Intel C++ Compiler8.1 + VC7.1使ってBOOSTをビルドしようとすると namespace "_stl" has no memberエラーがたくさん、かんべんしてくれ〜
365 :
デフォルトの名無しさん :2005/03/31(木) 11:48:57
linuxでインストールしたboostをアンインストールしたいのですが、どうしたらよいのでしょうか?
やっとboostのfilesystemがマルチバイト文字のパスに対応するそうな。
age
boost::filesystemって、ワイルドカード(*とか?とか)に対応してますか? ドキュメント読んだ限りじゃ、そんなところまで世話してくれなそうだったんだけど 俺環境はlinuxなので、シェルが勝手に*.txtとか展開してくれるんで、別に支障は無いんだけど、 プログラム側でそういうのも対応できたら嬉しい 自分でいちいちregexとか使って、パターンに合うファイル抽出しないといけないのかな
>>369 Linuxだったら、
readdir(2)で、ディレクトリパス名を引数に持つctorがあるイタレータを、
regexをfind algorithmに。すぐできるよね。
ワイルドカード展開にregex使うのはパターンの変換が面倒臭いんだがなぁ。
スレ違いだけど、 ${bash}/lib/glob/*.[ch]
CodeProjectにWindows環境でも使えるGlobクラスがあったよ
375 :
デフォルトの名無しさん :2005/04/18(月) 00:27:07
boost::regexで、括弧の入れ子構造を理解させる事ってできますか? 多分できないと思うんですが… 例えば↓このような文字列があった場合に、 123(abc(...)def)456(...)789 (abc(...)def) の部分にだけマッチさせたい、とかいう時です 単純に(.+)だと (abc(...)def)456(...) にマッチしてしまう (.+?)にしたら (abc(...) の部分にマッチする 面倒なんでもう関数書いてやる事にしましたが、 こういう多少面倒なパターンマッチって可能なんですかね? perlでも面倒臭そう
そこでboost::spiritというのはどうだろう。回答になってない気もするが。
>>375 正規表現で対応関係を表現することは(理論上、すなわち絶対に)出来ません。
([^)]*) じゃいかんのけ?
深さの最大値が分かってるなら、 \(.*?(\(.*?(\(.*?\))?.*?\))?.*?\) とか。
ライブラリによっては再帰的なパターンマッチに対応してるのもあるよね。
Perl(正規表現のためにPerlインタプリタを埋め込むのは馬鹿らしいけど)とか
C/C++用ならPCRE(Perl Compatible Regular Expressions)とか。
ttp://pcre.org/
蛇足だとは思うが boost::regexにはそれはない。
383 :
375 :2005/04/18(月) 02:13:24
むっはー、こんな短時間でこんなにレス付いてビビった
>>378 aaa(...)bbb(...)ccc
という文字列に対してそのパターンを使うと(...)bbb(...)にマッチしてしまう
自分は最初の(...)と、次の(...)にだけちゃんとマッチさせたかったので
つまり何をしたかったかというと、
一番浅い階層の括弧だけ見つけ出して(この時点じゃ、その中にまだ括弧が入ってるかどうかはどうでもいい)、
とりあえず除外しておく、残った部分の文字列を処理する
次に、さっき除外した部分の括弧に対して、今の関数を再帰的に呼び出して処理
これを繰り返して入れ子構造になった括弧を処理していく…、って事をしたかったわけです
あとやっぱこれくらいの処理だったら、
これのために知らないライブラリを新たに導入するよりは、
自分で適当な関数一つ書いちゃった方がいいかな
括弧の対応が取れてなかった場合はエラー出したいとかいうのもあるし
>>376 それ面倒臭そうだけど興味深い存在ではありますね
今度調べてみよっと…
boost::xpressiveのドキュメントにそのまんまっぽいサンプルあったぞ
vc6でboostをインストールしようとして、 bjam -ほなやらら とすると spawn:No such file or directoryと出るんですが どうすればいいですか?
ここはboostスレであって、無能無才の為の 質問スレではありません
ディレクトリ指定が間違ってるってことぐらいしか、考えられないよなぁ。
そうでした。パスが通ってませんでしたので解決しました
おまいらちょっと教えて下さい。 struct foo { int operator()(int x) const { return x; } }; struct foo_visitor : boost::static_visitor<int> { template <class T> int operator()(T f) const { return f(0); } }; に対して、 //boost::variant<foo> v(foo()); // エラー boost::variant<foo> v; v = foo(); // OK boost::apply_visitor(foo_visitor(), v); なのはなぜでSKY? 使い方間違ってますか
boost::variant<foo> v(foo()); // 無引数でfooを返す関数へのポインタをとってboost::variant<foo>を返す関数vの宣言。
「C++で最も奇妙な解析」ってやつだな
392 :
389 :2005/05/04(水) 14:34:02
>>390-391 EffectiveSTL にのってたあのことかー!
まさか自分でハマるとは...orz ありがとう、すっきりしたよ
>>390 違うんじゃないか?
それは、
boost::variant<foo> v(foo(*)());
じゃないか?
>393 foo()というのは関数型ですけれど,これは関数の仮引数の型に指定されると 自動的に関数へのポインタ型に解釈されなおされるので.
素朴な疑問なんだが、なんで boost::variant<foo> v = foo() にしないの?
公式にはintrusive_ptrよりshared_ptrを利用するべきと表記されているけど、intrusive_ptrが推奨されていない理由って何だろう? どうも参照カウント用オブジェクトをnewしてるshared_ptrの実装は無駄が多いように思えてintrusive_ptrを使っているんだけれど。
>>396 クラスが自分の管理の方法について口を出すわけだから、その分柔軟性が下がるんじゃ内科?
この場合は単に「必要ないのに参照カウンタが付いてくる」程度の問題しかおきないだろうけど。
効率の確保のためだけにintrusive_ptrを使っているなら、boost::in_place_factoryでラップすることを考えてみてはどうだろう。
クラスの定義をいじることなしに、参照カウンタとオブジェクトをまとめて確保できる。
表記法が独特なのと、生ポインタからの変換ができないという欠点はあるが。
>>396 weak_ptrのサポートの有無だと思うんですけれどね.
ただweak_ptrのサポートは非常に有益な場合もあれば,まったく不必要な場合もあるので
この理由だけでintrusive_ptrが推奨されているのかは分からないですけれど.
ここら辺もうちょっと詳しい議論どこかに落ちてないですかね?
>>397 前半は同意します.
後半は,それだとintrusive_ptrで十分な気がするんですがダメですかね?
あるいは単に外部で参照カウントを形成するタイプのスマートポインタが欲しいなら,
そういうスマートポインタ(ただしweak_ptrをサポートしない)を作ったほうが良くないですか?
399 :
398 :2005/05/07(土) 17:31:58
-この理由だけでintrusive_ptrが推奨されているのかは分からないですけれど. +この理由だけでshared_ptrが推奨されているのかは分からないですけれど.
400 :
398 :2005/05/07(土) 17:41:58
>あるいは単に外部で参照カウントを形成するタイプのスマートポインタが欲しいなら, >そういうスマートポインタ(ただしweak_ptrをサポートしない)を作ったほうが良くないですか? っていうかこれ意味不明ですね.無視してください.すいません.
>>397 >boost::in_place_factoryでラップすることを考えてみてはどうだろう。
誰か具体的に教えてくれるとうれしいな。
402 :
デフォルトの名無しさん :2005/05/08(日) 04:03:32
vector<std::string> vs; vs.push_back("aa"); vs.push_back("bb"); vs.push_back("cc"); for_each(vs.begin(), vs.end(), std::cout << boost::lambda::_1); だとOKで、最後が for_each(vs.begin(), vs.end(), std::cout << boost::lambda::_1 << std::endl); だとコンパイルエラーになるのなんで?
<< '\n'; に汁
素直にforステートメント使って書けばいいのにと思うのは俺だけでしょうか
最後まで残すものじゃないでしょ ちょっとした実験で書くときに短くさくっと書けるようにするもの>lambda
406 :
402 :2005/05/08(日) 04:30:16
とりあえず '\n' にします。 lambda は、405さんのおっしゃる通り、実装中のダンプ用に使ってます。
forで書くと、 vector<std::string>::const_iterator it = vs.begin() とか、iteratorの宣言がうざくなってくるからね。 for構文がtemplate野郎にやさしくなってくれると嬉しいと思う。
だよな typedef std::vector<std::string> hoge; とかってやると iterator の宣言はあまりウザく無くなるが、 今度は typedef がウザくなってしまう罠
409 :
407 :2005/05/08(日) 04:48:21
と思ったけど、typeofが使えれば、マクロで楽できるかな、と一人突っ込み。 #include <list> #include <iostream> using namespace std; #define FOR(it, beg, end) for(typeof(beg) it = beg; it != end; ++it) int main() { list<int> a; a.push_back(1); a.push_back(2); a.push_back(3); FOR(it, a.begin(), a.end()) { cout << *it << endl; } return 0; }
410 :
デフォルトの名無しさん :2005/05/08(日) 04:48:52
わざわざファンクタ作るのが一番めんどい解決法だぜ。
#define FOR(footype it, beg, end) for (footype ## ::const_iterator = beg; it != end; ++it)
何を意図してるのか知らないけど、 FOR(footype it←スペース区切り? ##←これいらないんじゃない? こんなの仕事で見たらぎょっとするし、 君が学生だったら単位はあげられないなあ。
カンマ抜けてた
>君が学生だったら単位はあげられないなあ。 そりゃ教授じゃないからだろ
Boost.FOREACHが待ち構えています
417 :
397 :2005/05/08(日) 16:57:18
xpressiveはどうよ?開発してるのはMicrosoftでGRETAってテンプレートベースの 正規表現エンジンとか書いてたプログラマらしいけど。
>>395 うーん。。。
なんとなくコンストラクタを直に呼んでる気がしてつい使っちゃう、とか、
= は引数が1個のときだけなので 2個以上と使い分けるのカコワルイとか、
C++ Primer 改訂3版 P.726 で推奨の書式と書いてあるから、とか。
本当は Boost.Variant のページのサンプルコードをコピペって
いじってたからですけど。今回のような落とし穴もあるので、
これからは = 使おうと思います。
= はコピーコンストラクタが起動することは知っておけよ
>>421 この場合に関してはコピーコンストラクタは呼ばれないんじゃ
ないですかね。
仕様書の 8.5 の #11,#14 あたりを読むと、foo() の 結果が
direct-initialization に使われるように読めます。
C++ Primer にも同じって書いてあるし、GCC4 で -O0 しても
呼ばれないし。
>>422 8.5-12 を読む限り、copy-initialization だと思うけど。
確かこれって、形としてはcopy-initialization だけど
direct-initialization として解釈することが
許されているって話じゃなかったっけ?
ttp://www.gotw.ca/gotw/027.htm このソースは情報が古いのかもしれんが。
copy-initilization と direct-initialization を形式に対するものと考えるか実際の処理に対するものと 考えるかの違いじゃない?8.5-12 からすると形式に対するものと考えた方がよさそう。 で、8.5-14 を解釈するところ以下のようになるかと。 から左辺の型が右辺と同じかその派生クラスである場合には、copy-initialization は direct-initialization と同じ処理が行われる。 そうでない場合は、適当なコンストラクタ or 変換関数が起動される。コンストラクタの場合は 一時オブジェクトが生成される。この一時オブジェクトが左辺の direct-initialize に上のルールに 沿って使用される(結果としてコピーコンストラクタ呼び出しになると思われ)。 実装はある条件下で、途中結果で直接初期化対象を構築することで、このコピー処理を取り除いてもよい。 boost::variant<foo> は foo でも foo の派生クラスでもないのでコピーコンストラクタ呼び出しが発生しないとは 言えない(発生しない場合もある)のではないかと。
>424 ×copy-initilization ○copy-initialization ×から左辺の型が… ○左辺の型が… △実装はある条件下で、途中結果で直接初期化対象を構築することで、… ○実装はある条件下では、初期化されているオブジェクト内に途中結果を直接構築することにより…
>>423-424 指摘ありがとん。やっぱ読み違えたか。
「一時オブジェクトが左辺の direct-initialize に上のルールに沿って使用される」
の辺りを読んで、コンストラクタ variant::variant(const foo&) の引数 foo 型に
対しての一時オブジェクトの話なのかと勘違いしました。
なんか仕様書のこの辺、ごちゃごちゃしてて分かりにくい…。
時間があるときにでも、もう一回ゆっくり読んでみまつ。
ええっと、なんか二重三重に勘違いしている気がしてきたんだけど…。 すまんが、まとめさせてくれ。 もともと、V v(foo()) の替わりに V v = foo() と書かないのか? という 395 氏に対して、俺は両者の動作に違いはないと思った (なのでこれからは = を使う、と返した)のだが、 それに対して 421 氏が「= はコピーコンストラクタが起動する」と 両者の動作に違いがあるような指摘をしたために、てっきり V の コピーについての話だと思ってたんだが、424 氏は「foo でも foo の派生クラスでもない」というように foo のコピーの話をしている? foo の一時オブジェクトが foo() で生成されて、v 内部の foo 型の 領域に copy-initialization されるのは分かります。それは別に = を使わなくてもそうなるわけで。 424氏の解釈の部分は、初期化の挙動を説明していて、 「適当なコンストラクタ or 変換関数」→ V::V(const foo&) 「この一時オブジェクト」→ V 型の一時オブジェクト=「右辺」 「左辺」→ V 型の v 「上のルール」→ 右辺と同じかその派生クラスの copy-initialization は direct-initialization になる と考えられるので、ようするに、 V v((foo())); でも V v = foo(); でも V v = V(foo()); でも、 一時 foo オブジェクトから一時 V オブジェクトを経て、 左辺である v が direct-initialization される点で同じ、ってこと だと解釈したんだが。 つまり、foo のコピーコンストラクタは(最適化されないなら)呼ばれ、 V のコピーコンストラクタは呼ばれない。また読み違えてるかなあ…。 もう完全に BOOST の話じゃなくてスマソ
>>418 もうそれしか使わねえ
お手軽spiritのコンセプトに感動した
実装するのは大変なんだろうけど
>>427 Exceptional C++ の項目42 「変数の初期化 ―― それとも?」 を読む限り
V のコピーコンストラクタは「呼ばれるかもしれない」
なぜなら、 foo 型と boost::variant<foo> 型は何の関係もない型だから
boost::variant<foo> v = foo();
は
boost::variant<foo> v(( boost::variant<foo>(( foo() )) ));
↑boost::variant<foo> 型の一時オブジェクトを作成する
という意味になる (が最適化によって直接初期化と同じになるかもしれない)
と思ったんだが、自信ないんで間違ってたら誰か指摘してくれ
>>427 >V v((foo())); でも V v = foo(); でも V v = V(foo()); でも、
>一時 foo オブジェクトから一時 V オブジェクトを経て、
V v(foo()); は一時 V オブジェクトを経ない。
で、まあ、ある状況下においては、残りの二つでも
一時 V オブジェクトを取り除いても別にいいよ、ってこと
>424 氏は「foo でも
>foo の派生クラスでもない」というように foo のコピーの話をしている?
多分、424 氏は「foo は variant<foo> でもその派生クラスでもない」
ってことを書きたかったのでは?
foo のコピーコンストラクタは今の件とはあまり関係ないと思う。
boostを勉強できる日本語の本は1つしか出ていないのでしょうか?
よく読んでやっと理解しました。みんなありがと。 8.5-12 で V v = foo() 形式が copy-initialization 形式であることを 押さえつつ、8.5-14 の「In certain cases, an implementation is permitted to eliminate the copying inherent in this direct-initialization by constructing the intermediate result directly into the object being initialized.」をよく読めよ俺、ってことですね orz 12.6.1-1 にも例が書いてあるし。つーか、Primer の記述が一番紛らわしいよ…
boostの英語の本でも C++ Template Metaprogrammingと The Boost Graph Library User Guide and Reference Manual くらいしか見あたらない。
大抵のものはリファレンスで十分だけど、 preprocessorとかspiritなんかは系統立てた解説が欲しいね。 特にpreprocessorは公式が手抜き過ぎ。
教えてください。 以下のようなキャストで、"boost::static_pointer_cast<>"を書きたくないのですが方法はありますか。 ダウンキャストになりますが、仕様上、整合性は保たれているので、できればキャスト指定を省略したいのです。 class CMyClass { }; class CMyClass2 : public CMyClass { }; void cast_test() { boost::shared_ptr<CMyClass2> smMyClass2( new CMyClass2 ); boost::shared_ptr<CMyClass> smMyClass1 = smMyClass2; boost::shared_ptr<CMyClass2> smMyClass3 = smMyClass1; // ここでコンパイルエラー // できればこの長いキャストをしたくない boost::shared_ptr<CMyClass2> smMyClass4 = boost::static_pointer_cast<CMyClass2,CMyClass>( smMyClass1 ); }
>>435 一つ言うと、型推論があるので
boost::static_pointer_cast<CMyClass2>(smMyClass1);
でいい。
でも多分C形式のキャストみたいなのを求めてるんだろうね。
BBが_1〜_9をグローバル名前空間に突込んでくれやがるのは どうしたもんですかね。 BLLのplaceholderと共通化してくれると一番よいのだが。
>437 #include <boost/lambda/bind.hpp> では駄目?
439 :
424 :2005/05/11(水) 23:41:55
解決したみたいだけど、漏れが source と destination 完全に取り違えて書いちゃったのが混乱の原因だな。 ごめん、吊ってくる。 ×から左辺の型が右辺と同じかその派生クラスである場合には ○右辺の型が左辺と同じかその派生クラスである場合には ×boost::variant<foo> は foo でも foo の派生クラスでもないので ○foo は boost::variant<foo>でもその派生クラスでもないので
boost に Int2Type や Type2Type はありますか?
>>435 「整合性は保たれている」という情報はコンパイラの知りえない情報なので、無理。
任意の型のメンバ関数に、レシーバだけバインドする関数ってありませんか? class Klass { void method1(A a, B b, C c); [...] }; で bind_obj(&Klass::method1, this) とかすると(A,B,C)の3引数の関数オブジェクトを作ってくれるようなのが あると嬉しいのですが。
443 :
435 :2005/05/12(木) 09:04:01
>>436 >>441 ありがとうございます。
>「整合性は保たれている」という情報はコンパイラの知りえない情報なので、無理。
operator=の記述などでなんとか回避できないかと思ったのです。
教えてもらった短いキャストでやろうと思います。
>>442 boost::bind or boost::lambda::bind
>>440 Int2Typeに相当するのは、各種整数定数
bool_<>,int_<>,long_<>,size_t<>,integral_c<>
Type2Typeは、T自信を返すメタ関数という点では identity<> だが、
オーバーロードに絡んだディスパッチには enable_if<> がよく使われる
boost::gui まだぁ?
boost::gay まだぁ?
無ければ作るか、と思って書いてみたけど・・・ #include "boost/function.hpp" template<class T, typename Signature> boost::function<Signature> bind_obj(Signature T::* mf, T* obj); struct S { int MF(int, bool, char const*) { return 0; } }; int main() { S s; boost::function<int(int, bool, char const*)> x(bind_obj<S,int(int, bool, char const*)>(&S::MF, &s)); return x(0, false, ""); } bind_obj の呼び出しでテンプレート引数の推測が効かないみたい。 ↑のように明示的に指定してやると、 g++ 3.4.1 でコンパイルはできた。(まだ定義が無いのでリンクは無理) だれか続き頼む。
444ではないが…以下で何がマズイの?
>>448 Klass obj;
A a; B b; C c;
boost::bind(&Klass::method1, &obj, _1, _2, _3)(a, b, c);
あるいは、
template <class R, class T, class A1, class A2, class A3>
boost::function<R (A1, A2, A3)> bind_obj(R (T::*mf)(A1, A2, A3), T* obj) {
return boost::bind(mf, obj, _1, _2, _3);
}
として、
bind_obj(&Klass::method1, &obj)(a, b, c);
>>449 エレガントな実装はできないと思う。
# define BIND_OBJ_MAX_ARITY 8
# include <boost/bind.hpp>
# include <boost/preprocessor.hpp>
/* 戻り値型の指定のために実装用のboost::_biおよびboost::_mfi名前空間を使っている */
# define OVERLOAD_N(z, n, mfb_cv); \
template<typename R, typename T BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename A)> \
boost::_bi::bind_t<R, \
MFI_NAME(mfb_cv, n)<R, T BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, A)>, \
LIST(n)<boost::_bi::value<T *> BOOST_PP_ENUM_TRAILING_ ## z(n, ARGTYPE, !)> > \
bind_obj(R (T::*f)(BOOST_PP_ENUM_PARAMS_Z(z, n, A)), CV(mfb_cv) T *p) \
{ \
return boost::bind(f, p BOOST_PP_ENUM_TRAILING_ ## z(n, PLACEHOLDER, !)); \
}
# define PLACEHOLDER(z, n, _unused) BOOST_PP_CAT(_, BOOST_PP_INC(n))
# define MFI_NAME(mfb_cv, n) boost::_mfi::BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(2, 0, mfb_cv), n)
# define ARGTYPE(z, n, _unused) boost::arg<BOOST_PP_INC(n)>
# define LIST(n) boost::_bi::BOOST_PP_CAT(list, BOOST_PP_INC(n))
# define CV(mfb_cv) BOOST_PP_TUPLE_ELEM(2, 1, mfb_cv)()
BOOST_PP_REPEAT(BOOST_PP_INC(BIND_OBJ_MAX_ARITY), OVERLOAD_N, (mf, BOOST_PP_EMPTY))
BOOST_PP_REPEAT(BOOST_PP_INC(BIND_OBJ_MAX_ARITY), OVERLOAD_N, (cmf, BOOST_PP_IDENTITY(const)))
>>450 引数の数が違うと使えないのが嫌なんじゃないの?
>>442 に「任意の型のメンバ関数に」って書いてあるのが、そういうことなんじゃないかな。
mpl はともかく enable_if も TR1 には含まれてないんでつね。。。むう
Visual Studio .NET 2003でformatを使ったときに出てくるたくさんのwarning C4244とC4267、 皆様どうやって折り合ってるんでしょうか。 warning無視なんてできないし、 pragmaで消すのもコンパイラ依存で気持ち悪いし、手間だし、 私的には、これでは使いたくても使えない、printfでいいや('A`)って結論に落ち着いてしまうんですけども。 テンプレートとかよくわかんないんだけど、解決不能なんすか? ぐぐってみると何年も前からある問題みたいな感じが。
pragma使わず、プロジェクトの設定でいいじゃん。
>>453 SFINAEは最新のコンパイラがやっとこさ対応している程度だし,
言語規格的にも曖昧なところが多いですから.
>>454 >pragmaで消すのもコンパイラ依存で気持ち悪い
どうしても気持ち悪いなら<boost/config.hpp>のマクロで環境切り分けるとかダメですか?
>手間だし
pragmaかましたヘッダを用意してそちらを常にincludeするとかダメですか?
>>456 > 言語規格的にも曖昧なところが多いですから
解説きぼん。
result_of や type_traits を SFINAE 無しで実装するのは かなり無理っぽい気がしますが
boost::function<string (string& s,size_t i,size_t e ) > f2 = boost::bind(&string::substr,_1,_2,_3); ↑こんな感じでstring::operator+= を関数オブジェクトにしたいのだが断念。 しかたなく一行ファンクタを書いたのだが、悔しいのでだれか仇を討ってくれ。
>>459 function<string& (string&, string const&)> を作れば良いのか?
>>459 オーバーロードされてるので、どれ使っていいか教えてあげないと。
bind<string&,string,const string&>(&string::operator+=,_1,_2)
>>457 曖昧という表現は微妙にまずかったです.
規格的には(14.8.2/2)で適用される場合が明確に列挙されていますし.
ただ,テンプレート引数への代入によって無効な型や構文が生成されるのは
(14.8.2/2)に列挙されている場合以外にもあるので,それらの扱いも明確にしてほしく,
そういう意味で曖昧だと書きました.(14.8.2/2)に列挙されている場合にも,
一部どういう扱いにするのか微妙な例が存在しますし.
いずれにせよ指定された名前が内部型と定義されているかどうかは
SFINAEとしてはかなり明確な部類なのでenable_ifの文脈にはあまり関係しないです.
すいません.
>>458 result_ofやtype_traitsってSFINAEが要ります?特殊化やsizeofハックでほぼ実装できませんか?
自分が知っている中でSFINAEを使用しているのは唯一boost::is_abstractだけです.
ただ,is_abstractが利用しているSFINAEは上で書いたような「規格で明言されていないもの」の一つですけれど.
>>461 おおおおすげー動きました。どもありがとです。
おかげで二行もない関数の関数名をたくさん考えずにすみます。
この場合、実質何もbindしてないから、 boost::mem_fn<string&,string,const string&>(&string::operator+=); とか、そもそも std::mem_fun_ref<string&,string,const string&>(&string::operator+=); で十分なわけだが。
465 :
デフォルトの名無しさん :2005/05/23(月) 08:02:17
boostはスレッドセーフですか?
モノによる。 ところでtypeofのformal review始まったね。
467 :
デフォルトの名無しさん :2005/05/23(月) 16:12:00
boost/random.hpp でメルセンヌ・ツイスターの乱数を使いたいので variate_generator<mt19937, uniform_real<> > rng(mt19937(29833u), uniform_real<>()); としましたら、ある環境では rng() で 0 から 1 の乱数が取得できるのですが、 別の環境では rng() で 0 しか返ってきません。両方ともインテルのコンパイラ icc です。 違うのはヘッダファイル群の置き場所が、 前者は /usr/local/boost 、後者は /usr/include/boost くらいです。 似たような現象が起こる方はいらっしゃいますか。 ちなみに、他の乱数(フィボナッチとか)では両方ともうまくいきます。 また、なぜこのようなことが起こるのか、ご存知の方がいましたら対処を教えてもらえませんか。
468 :
454 :2005/05/23(月) 17:11:01
>>455 コンパイラオプションで殺してしまったら、boost外の自分のコードの警告も隠れてしまって
まずいんと違いますか。
>>456 うう、やっぱりpragmaをどうにか入れ込んで折り合ってるんですね。
自分の趣向には合わないので、とりあえずformatの使用は保留することにします……。
469 :
455 :2005/05/23(月) 17:56:46
>>468 プロジェクトファイルに、個個のファイルのオプションを指定すればいいと言う意味なんだが。
MultiArrayはインテルのコンパイラやgccなどがsseなどを自動的に使用する際に 最適化しやすいように設計されているのでしょうか?
471 :
デフォルトの名無しさん :2005/05/26(木) 10:43:01
ネットワーク関係の処理は出来ないのでしょうか
>>471 sandbox に boost::socket があるよ。
どのレイヤーのネットワーク・プログラミングやりたいかにもよるけど、
TCP/UDP あたりで良いなら、libskstream は?
個人的には、C 関数を使った方が良いと思うがね。
boostのMLでネットワーク関係の話が出ると「ACEでいいぢゃん」で終わるのが恒例だった希ガス
ACEって名前は出るわりにはぜんぜん使われてないよな。
やっぱりUNIX文化にとっては、マイナーなライブラリ、 それも巨大なものとなると、どうも使うことを嫌がられるね。 テンプレートライブラリという解決方法は、UNIXの思想とも 一番マッチすると思う。
ACEはフレームワークだから、独自の色があるよな。 嫌な人はダメでしょう。 そもそも他に使うライブラリ、フレームワークとなじまないと辛いし。
boost::socketが昇格するのはいつ頃だろうか…
479 :
デフォルトの名無しさん :2005/05/29(日) 09:59:35
正式に規格化されるのはいつですか?
Pentium-DとAMD64-X2, BOOSTをへビーに使ったC++のソースを コンパイルする場合どちらが高速になると思いますか?
PenD なんかと比べたら AMD がかわいそうだろw
PentiumDはX2に見せかけだけで対抗するために作られたものだから、 買わない方がいいよ。
デュアルコアって名前付けるだけで買う馬鹿もいるんだな。
boostがどうかは知らんけど VCでのコンパイルならAMDのぶっちぎりで Pen4系は手も足も出なかったはず PenD相手なら、AthlonXPでも勝てるかもよ ちなみに日本の雑誌系メディアは intelに不利なベンチは完全無視する傾向が強いから 日本のサイト回って情報集めても無駄かも 海外のサイトでは普通にコンパイル速度のベンチしてる ちなみにAMDがメモリ帯域で不利だった時期には あれほど重視していたメモリ帯域ベンチを 最近は黙殺に近い状態なのも、これが原因
祝! typeof has been accepted!
486 :
デフォルトの名無しさん :2005/06/03(金) 19:51:30
すいません。boost::thread って、スレッドの優先順位を設定したり出来ないんでしょうか?
yeildとかthread::sleepとかでさして重要でないスレッドの占有率を下げるとか。 負荷がかかってない場合は優先度を上げても処理が速くなるわけではないみたいだったような、 ちゃんと検証したわけでないが。
488 :
486 :2005/06/06(月) 19:07:50
再びスミマセン。
>>487 その方法だと、優先度を変更するような場合に、ちょっと厄介ですよね。
OSのAPIにあるように単純にプライオリティを設定できるインタフェースがないかなと思ったんですが、
やっぱりなさそうですね。
あと、threadを別のthreadからkillするインタフェースってあるんでしょうか? やっぱりない?
Boostって stdc++ stl 前提のライブラリなの?
>>489 標準ライブラリを外部のライブラリが使って何が悪い。
>>489 boost preprocessor ライブラリは素の C でも使える。
493 :
デフォルトの名無しさん :2005/06/09(木) 21:35:04
Boostって使うとGPL地雷踏む?
大丈夫
むしろGLPを敵視しているように思える
>>495 GPLを敵視してる?そんなことないだろ。
敵視はしてないかもしれんが、GPLでは使い物にならんと思ってるのは事実だな。
Spiritで、ツリーでno_node_dを使おうと思ったんですが、使うとどうしてもエラーが出ます。
検索してみたらバグがあったけど改善されたようなことがわかったんですが、
最新版のBoost(1.32.0
ttp://sourceforge.net/project/showfiles.php?group_id=7586 )の中のSpiritを使っても
エラーが出ました。ちなみにno_node_dをコメント化するとエラーは出ないようでした。
エラーメッセージは、
...\boost\spirit\core\non_terminal\impl\rule.ipp(190) :
error C2664: 'boost::spirit::impl::abstract_parser<ScannerT,AttrT>::do_parse_virtual' :
1 番目の引数を 'const boost::spirit::scanner<>' から 'const boost::spirit::rule<T0,T1,T2>::scanner_t &' に変換できません。
と出ます。
何が原因でしょうか?
>>500 BCCのC++の規格への対応度が低いせい。
VC++じゃないのこれ?
error C2653: 'booost' : 識別子がクラス名でも名前空間名でもありません。
>504 何をしたいんだお前は
きっと寂しかったんだよ
507 :
500 :2005/06/11(土) 09:58:11
やっぱり無理なんですか… コンパイラはVC7.1です。 他のを駆使して似た処理を作るしかないのか…
STLportは?
>500 spirit 使ったことないからよく分からんのだが rule の宣言はどうやってるの? scanner は指定せずにデフォルトの scanner<> ? さらっと流してみたところでは boost::spirit::rule<T0, T1, T2>::scanner_t が boost::spirit::scanner<> に なるはずなんだけど。
>>500 俺もVC7.1だけど、警告を3つ出しただけでノーエラーで通ったよ。
あ、ちなみにソースは"xml_grammar.hpp"をインクルードした空のmainだけど。
511 :
500 :2005/06/11(土) 18:55:44
>>508 STLport使うと何か変わりますかね?
ちょっとやってみます。
>>509 詳しくはわかりませんがruleは
#define RULE(x) rule<ScannerT, parser_context<>, parser_tag<ruleid_ ## x> > x;
とマクロを使って定義してます。
>>510 マニュアルを読んだときにxml_grammar.hppを知ったんですが、なぜか自分のには存在しなかったです。
libs/spirit/example/application/xmlにあると書いてあるようですが、
applicationフォルダから存在しないようです。
最新版のzipファイルの中をExpLzhで覗いてもありませんでした。
古いバージョンにしかないんですかね?
512 :
500 :2005/06/11(土) 19:15:59
あっSTLportを使ってるかどうかってことですか。使ってないです。
>511 その ScannerT は scanner<> の間違い?
>>513 ast_calc.hppとかのサンプルのコピペだったと思います。
ちなみにscanner<>に変えてもエラーは出ました。
515 :
500 :2005/06/16(木) 22:44:39
大体わかってきました。513氏が言っているように、どうやらruleの宣言が問題なようです。 rule<scanner<> > hoge; 〜 no_node_d[hoge]とするとエラーは発生せず、 rule<ScannerT> hoge; 〜 no_node_d[hoge]だとエラーが出ます。 やっぱりコンパイラかSpiritのバグが原因のような気がしたのであきらめることにします…
恐らくno_node_dディレクティブが別のscannerを要求しているんでしょう. hoge以下を分離して別のgrammarとして実装するのが一番楽な回避方法だと思います.
その ScannerT って型はどこからやってきたの? scanner_base を継承してないとうまく動かないはずだけど…。
519 :
500 :2005/06/18(土) 20:50:12
>>516-517 試しにmultiple scannerというのを使ってみると確かに正常に動きました。
でも推奨されて無いものを使うのはできれば使いたくないので、
やっぱり分離するのが良さそうですね。
>>518 grammarを継承した構造体のメンバのdefinition構造体がテンプレートクラスで、
struct hogehoge : public grammar<hogehoge> {
... template<typename ScannerT> struct definition { ... }; ...
};
と、サンプルのtree_calc_grammar.hppと同じように定義しています。
実行時型情報を使って typeid(ScannerT).name() と表示させてみるともの凄く長くて、
class boost::spirit::scanner<char const *, struct boost::spirit::scanner_policies
<struct boost::spirit::iteration_policy, struct boost::spirit::ast_match_policy
<char const *, class boost::spirit::node_val_data_factory<struct boost::spirit::nil_t> >,
struct boost::spirit::action_policy> >
と出ました。
bcc5.5.1でbjamしようとすると E2489 オプションコンテキスト応答深度の上限を超過:再帰をチェックしてください というのがmplまわりで大量に出てほとんどコンパイルできません ていうかビルド必要ないlexical_castとかincludeしただけでも そのソースをコンパイルする時に同じエラーが出まくりやがります… VC++Toolkitあたりでコンパイルしてcoff2omfするくらいしか 手だてはないんでしょうか
あ、ちなみに1_28_0は問題ありませんでした serialization使いたいんだけどなぁ(ノД`)
bccを使うのやめればいいじゃん
あ、これは5.6.4の結果か。 でも似たようなもんだな。
>>520 COFF2OMFは万能ではない、ていうか無能なので
Borland環境でBoost利用するのは、現時点では諦める鹿?
困ったので漏れ、Boost使ってる部分はMingwでつくってDLLにして
BCBにリンクしたぞゴルァ
>>525 なるほど…DLL化も検討してみます
しかしヘッダインクルードしただけで
templateの再帰深度が〜とかありえないBCC
527 :
525 :2005/06/29(水) 11:42:49
とはいっても MSVC GCC BCC それぞれ C++ ABI が違うので C ABIでラッパー書かないといけない罠 それとも COM化する? ウヒヒ オレハ ヤダネ
>>520 そこまでするなら全部VC Toolkitにしちまえよ。
ヒント: VCL
530 :
520 :2005/07/01(金) 10:43:07
>>528 いや〜趣味グラムとはいえWin32意識しててデバッガまで手軽に使える
BCCの存在意義はでかいとおもうんですよ
ていうかデバッガ無しでプログラム書ける人ってすごすぎる
デバッガ無いと書けない奴の方が稀。
稀っつーか、蛸?
デバッガ有り無しでは効率が全然違うのに 未だにprintfデバグに固執するやつのが蛸。 もっと時間を有効に使えよ。
TestUnit……
書けるか書けないかの問題なのに、相手が固執しているかのように思い込んでしまう大蛸。
>>531 組み込み系のかたですか
小規模プログラムは楽でいいですね
俺はエディタがないとプログラムが書けない。ヘタレだから。
組み込み系こそデバッガ必須だと思うが……
必要だが、なかったり、ブレークかけられなかったりと、現実は厳しい。
542 :
520 :2005/07/03(日) 22:06:35
すみません僕のせいであらぬ方向に荒れてしまったみたいで… 実はC++BuilderXのトライアル版入れてBCC32ver5.6.4使ったら ビルドはうまく行きました…が、ピンポイントでSerializationだけ libが作れませんでした。もう諦めまう。
544 :
520 :2005/07/05(火) 10:43:13
>>543 おお!failed1つもなくビルドできました!プリミティブ型のシリアライズは問題なし、
しかしクラスのシリアライズしようとするとコケます…
#include <fstream>
#include <boost/archive/text_oarchive.hpp>
#pragma link "libboost_serialization-bcb-sd.lib"
class Foo {
int i;
friend class boost::serialization::access;
template< class Archive >
void serialize( Archive & ar, const unsigned int version ) {
ar & i;
}
public:
Foo():i(0xDEADBEEF){}
};
int main() {
Foo foo;
std::ofstream ofs( "data.txt" );
boost::archive::text_oarchive oa( ofs );
oa << foo;
ofs.close();
return 0;
}
こんなコードでoa << foo;がページ違反起こして落ちまする…
/tmp/ccND9jf0.o(.gnu.linkonce.t._ZN8CExpdataIfE16SpatMedianFilterEv+0x216): undefined reference to `boost::thread::~thread()' collect2: ld returned 1 exit status コンパイル時にこのようなエラーが出るのですが、何がいけないのでしょうか? ライブラリのパスでしょうか?setenvで見てみると通っているのですが・・・。
>>545 libboost_thread リンクしてるか?
547 :
デフォルトの名無しさん :2005/07/07(木) 10:13:48
uBLASの使い方がよくわかりません。どこか、よい解説のページはありませんか?
>>547 ググるといくつかヒットするけど
それじゃだめなの?
549 :
デフォルトの名無しさん :2005/07/13(水) 08:51:19
STLのファンクタだと 引数はargument_type、 戻り値はresult_typeとあると思うんですが boost::lambdaによって作られたファンクタで それらに当たるものがみつけられません。 戻り値は、ファンクタ::sig< tuple<ファンクタ,ファンクタの引数型> >::type だとわかったんですが、ファンクタの引数型がわかりません。 教えてください。
引数型は決まらないんじゃないか? std::cout << _1 /* ostreamに出力できる任意の型を取る */ bind<double>(std::atan2, _1, 2) /* doubleに変換できる任意の型を取る */
551 :
デフォルトの名無しさん :2005/07/13(水) 11:32:31
>>550 template< typename Iterator, typename Function >
void f( Iterator begin, Iterator end, Function func )
{
Function::result_type sum = 0;
for( Iterator i = begin; i != end; ++i )
{
sum += func( *i );
}
}
STL標準のファンクタでしたらこういう書き方が出来るんですが
これをラムダで書き直そうとすると、
Function::sig< tuple<Function,??ファンクタの引数型??> >::type sum;
になってしまい、書くことが出来ません。
こういう場合どのように解決すればいいんでしょう?
引数型はわからない前提で何らかの工夫をすべきでしょうか?
>>551 sigには実際に関数オブジェクトに渡す引数の型を渡す。
その例だと、
typedef typename std::iterator_traits<Iterator>::value_type argument_type;
typename Function::template sig<tuple<Function, argument_type> >::type sum = 0;
553 :
552 :2005/07/13(水) 12:10:25
ついでに、sig<...>::typeにはconstが付いている可能性があるから、外した方が良いな。 typedef typename Function::template sig<tuple<Function, argument_type> >::type result_type; typename boost::remove_cv<result_type>::type sum = 0;
554 :
デフォルトの名無しさん :2005/07/13(水) 12:48:53
>>552 iterator_traitsという便利なものがあったんですね!
この部分は解決しそうです、ありがとうございました。
あと、もうひとつ聞きたいんですが、boost::lambdaで
コンパイルエラーをすると、エラーの説明が出ても
もの凄い量訳のわからない内容で打つ手無しになっちゃうんですが
皆さんはどうやって解決されてるんですか?
精通すると読み取れちゃうもんですか?
>>549 基本的には552さんの言うとおり実際に関数オブジェクトに渡す引数の型ですが,
より厳密には呼び出されるoperator()の引数のシグネチャから参照のみを外したものになります.
つまりsigに指定するファンクタの引数型は必要に応じてconst or volatile修飾してやる必要があります.
これはoperator()が引数の非const参照とconst参照の差異に基づいて
overloadされている可能性を考慮しているためです.
struct F
{
int &operator(int &x);
int const &operator(int const &x);
template<class FArg> struct sig;
template<> struct sig<tuple<F, int> >{ typedef int &type; };
template<> struct sig<tuple<F, int const> >{ typedef int const &type; };
};
http://boost.cppll.jp/HEAD/libs/lambda/doc/ar01s05.html の"The sig template"のところにもうちょっと詳しいことが書いてあります.
>>553 参照も付く可能性があるのでちゃんとやるならremove_referenceもかけないとまずいと思います.
自分は面倒なのでremove_reference -> remove_cvをやるメタ関数定義して使ってます.
template<class T>
struct plain : public remove_cv<typename remove_reference<T>::type>{};
>>554 自分はエラーメッセージをフィルタするスクリプト書いて,それ通して読んでました.
tupleの尻尾についてくるnull_type消しただけでもかなり読みやすくなった覚えがあります.
>>556 参考になります。
ありがとうございます。
boost::lambda::bindでやっても
boost::bindでやっても
基本的なメンバ関数呼び出しのファンクタが
作れず、ずっと悩んでいたんですが
原因がメンバ関数呼び出し規約をthiscallではなく
__stdcallにしていた為でした。(VC++2003)
なぜそうなのか理由はわかりませんが、
もう限界です。さようならlambda
boost_xxxxxx.lib と libboost_xxxxxx.lib ってこの違いに何か意味があるの?
boost_xxxxxx.libはインポートライブラリでしょ
560 :
デフォルトの名無しさん :2005/07/19(火) 16:57:18
1.33のスケジュールは決まってるのですかね?
その前に規格入りしやがれ Longhornまでには入れと言いたい
次のC++規格更新いつよ?
200X年
std_functorの内部みて基礎を固めようと思った。
規格更新って今年じゃなかったの?
このスレでいいのかわからないのですが知恵を貸してください。 Observer/Observableモデルを提供するクラスがあります。 例えばObservableにObserverを追加する実装は次のようになっています(CMagazine 2002/11)。 typedef boost::shared_ptr<Observer> shared_t; typedef boost::weak_ptr<Observer> weak_t; typedef std::vector<weak_t> observers_t; void Observable::addObserver(shared_t observer) { observers_t::iterator iter = observers_.begin(); while( iter != observers_.end() ) { shared_t target = iter->lock(); if ( !target ) { iter = observers_.erase(iter); } else if ( target == observer ) { return; } else { ++iter; } } observers_.push_back(observer); } こういう実装でCMainFrameをObserverから継承しているのですが MFCがCMainFrameを確保してしまうためnew CMainFrameできず、 Observableのリストに追加するいい方法が思いつきません。 void CMainFrame::hoge { someobservable->addObserver(this) // こうしたい } こういうときどうすればいいのでしょうか?
>>567 shared_ptr に delete されるのが困るってことなら、
struct null_deleter
{
void operator()(void const*) const {}
};
class CMainFrame
{
....
boost::shared_ptr<CMainFrame> this_;
CMainFrame() : this_(this, null_deleter()) {...}
};
void CMainFrame::hoge() {
someobservable->addObserver(this_);
}
こんな感じか?試してないが。
569 :
567 :2005/07/29(金) 01:51:02
>>568 解決しました。
こういうのさっさと思いつかないといけないんだろうなぁ・・・。
実はかなり長い間悩んでますたorz
ありがとう。
お、丁度あいとるなw 駄文書くなら今の内… "ちゃねらーとして、boost 使ってますと自称できるレベルはどのくらいか" // ぁあ、書いてしもうた…とうとう書いてしもうた…
>>570 そんなもん boost 使ってたら自称できるだろ。
「 boost ?使ってますよ。まだ boost::noncopyable だけですが。」っていう奴に
「それじゃぁまだまだ boost 使ってますと自称できるレベルじゃないね」とか偉そうに言いたいわけ?
即レスdクス 何かが逆 極端に言えばだ 「 boost ?使ってますよ。まだ __cdecl regcompA だけですが。」っていう漏れが、 「それじゃぁまだまだ boost 使ってますと自称できるレベルじゃないね」とか偉そうに[言われ]たくないわけorz
boost は、あくまで手段の一つであって使うこと自体に意味はないんじゃね?
およ? トリ出てたよorz せっかくばれたから暫くkey だけにしとく スレ汚しスマ boost はもちろん、便利だし、便利そうだから使う ところで将来、boost で上みたいに質問したくなったとき、「こんくらい知っとけよ俺」みたいなレベルもあるかなと
>>574 boostは雑多なライブラリ集合体だからなあ
つまみ食いするのが正しい使い方としか
そっその認識で合ってるのか!! (← 字面では煽っているようにも見えるが、歓喜の声) 正直ちょとほっとした わっかんねえ内は何もかもが有機的につながって見えるからなあ iter やpred といった指向性は一貫してるとしてもだ
stlだって、全て把握して使っている香具師はそうそういないでしょ。
すべてを把握しなければ使えないのではないか…その思い込みの呪縛が 漏れをSTL/boost の新世界からずっとずっと締め出していたorz (boost じゃないが)(例えば)std::map の存在を知りながら ぼろぼろの自作のclass mymap できこきこ走ってきた… そうまさに、全て把握して使えなくたって、いいんですよね 自信ないですが、そう思いたい (でもま、人様の技量レベル標準てのはやっぱ気になるですけどね、先々質疑に参加したいなら)
Boost で特に便利だと思うのが、Iterator 関連。 マルチバイト文字列をワイド文字列のように扱うイテレータとか簡単に出来る。 class mbcs_iterator : public boost::iterator_adapter < mbcs_iterator, uchar_t const *, wchar_t, boost::forward_traversal_tag, wchar_t > { typedef boost::iterator_adapter< ... > base_type; public: mbcs_iterator( uchar_t const * p ) : base_type( p ) {} void increment() { base_reference() = _mbsinc(base()); } wchar_t dereference() const { return _mbtowc( base(), MB_CUR_MAX ); } }; みたいな。
初段者の観点でいえることは、「あなたにもイテレータが作れちゃうんです」っていうのは STL にありそうでないんだなと思ったってことです // 技量の話にこだわれば、漏れのレベルは、上のサンプルみて、いわゆる拒否反応はないが、 // それでさっそくどう使えるかはさっとコード書けない しかし、「それ面白そうやな」ということは読んで取れる
全てを把握しなきゃいけないなんて言っちゃったら C++なんてほとんどの人が使えなくなっちゃうよ。 「それじゃぁまだまだ boost 使ってますと自称できるレベルじゃないね」 なんて言われたとしても笑ってスルーしとけばいいんじゃない。
標準ライブラリのlocale周りを完全に把握しているC++プログラマなんて何%いるんだか。
あの付録読んでから、少なくとも、0x20-0x7F 外の大文字小文字比較は油断できないことだけは覚えた いざってときは、多少なりともSTL の助けがあることも
>>583 初心者歓迎スレに、丁度テンプレートの話題が出てるよ。
試しに読んでみたら?
そういえば、boost::container_adapter ってどうなったんだ?
>>584 ざっと覗いてきたですよw あとで何度も精読するとして
boost の話題としては、ほんとはじめての頃、 _1 って何よとかオモタw
それと、そうだ、初心者ならではの、かつboost な質問:
「lambda は凄く便利そうで、早晩気に入りそうだが、精神的に依存しきってしまって大丈夫かw」
慣れるまではむちゃくちゃに援用しそうな、今からもはや恥ずかしい悪寒ですがw
>>573 > boost は、あくまで手段の一つであって使うこと自体に意味はないんじゃね?
いやいや、俺はboostだけで飯が三杯喰えるよ、だからどうってわけじゃないけど
PC と酒とboost があれば、3日過ごせそうな気はする 連投スマ
boostの中には組み合わせて使うことが多かったり相性の悪かったりするものもある。 知悉する必要はないがどういうものがあるかという概要くらいは 使わなくても頭に入れておいて損はない。 存在を知らないと、ここであれ使って簡単に済ませられそうかなあ……調べてみよ、 とかも思い付かないと思う。
>>589 >相性の悪かったりするものもある。
くあしく
>相性の悪かったりするものもある。 boost::lambdaとboost::bindを同時に使おうとすると_1などが名前の衝突起こす。 まあboost::lambda::bindに統一すりゃいいんだが。 そういうことじゃなかったらすまん。
boost::bindの_1はなんでグローバルにあるんだろう。 lambdaの_1はboost::lambdaに属しているのに...
OpenJaneのログからboost::を検索してみたんだが、随分色々あるねぇ。 齧っておいて損はないと思いながら未だ拾ってもいないのだが、 stlで飽き足らない技術者向けの解説サイトはないもんだろか。 #後は入手先とか情報がまとまってるとかね。
594 :
デフォルトの名無しさん :2005/08/11(木) 18:53:10
書いてある内容に不満はないが、不足だな。 もっと詳しく知りたい。 例のバイブルも導入にはいいけど、細かい話がないし。 結局、ソース嫁って結論なのかね。
596 :
593 :2005/08/11(木) 20:08:59
>>594 さっき検索して見つけたから後で自宅で読もうと思ってマークしてたのが丁度そこだった。
>595によると不足だそうだけど、取り敢えず読んでみるよ。THX!
ここで仕事でboost::spiritを使った俺が来ましたよ。
>>593 Cryoliteたんのとことかp_stade;とかはけっこう面白いネタやってて好き。
あと、ここもエキスパートな人見てくれてると思うんで、よっぽど変な
聞き方しなければレスつくと思うよ。
600 :
デフォルトの名無しさん :2005/08/12(金) 17:24:52
boost1.33.0リリースage で、何が変わったの?
目玉はPointer Container Libraryになるのかな
おやboost.orgのレイアウトがやたら変わっている まあとりあえずダウンロードしてみるか
Regex++とMersenneTwisterのためだけに使ってたけど、今回は結構使えそうなライブラリ増えてる印象 なにげにハッシュコンテナのサポートが嬉しい。 Regex++はPerl拡張構文サポートが結構充実した感じ? 個人的にはDFAとかAC法、CW法なんかの文字列照合ライブラリの拡充を希望したい。
regexがすごい進化しててよさげ。 filesytemはどうなったんだろう...
ドキュメント1行解読するのに1時間くらいかかる英語力なんで いきなりソース読んでみるしかないんだが・・・boostは難しいな。 土日全部使うか。
今からでも英語勉強した方が……十分ペイするんじゃないか
607 :
デフォルトの名無しさん :2005/08/12(金) 22:43:14
いまMinGWとVC++.NETにインストしたところ。 MinGWには何の問題もなくインストできたが、VC++.NETでは 「メモリが足りんぞー」 エラーメッセージが何度も出てくる。 とりあえずライブラリは出来たようだが、本当に使えるんだろうか?これ。
boost::iostreams::zlibなんてのもあるのかー。
>>606 いや勉強はずっとしてるんだけど、いくらやっても読めないものは読めないw
ソース読んでライブラリを理解してからじゃないとドキュメントの意味がわからんってのも
すごい話だけどな。
>>610 そりゃ勉強してるつもりでしてないか、勉強法が悪すぎるかじゃないか。
>>611 610は日本語のドキュメントで意味がわからなくて、
ソース読むタイプだと思うよ。
>>612 610はソース読んでも意味が分かってないタイプだと思うよ。
なんで英語ネタに食いついてるレスは 後ろの改行が一つ多いんだ?
C++ 特にboost ともなれば、命名には気を遣えというルールが重みを持ってきますが、 ということは、微妙な英語のニュアンスがわからない漏れは、何か重要で繊細な何かを 読み落として損してる悪寒…orz // ↓一行空けw
>>607 こっちはVC++.NET2003とSTLPortだとWaveがビルドできなかった。
VC++.NET2003だけだとOK。
Janeの末尾整形使ってるから下に入ることは稀だな。 末尾は改行入れ「ない」習慣をCやC++でやられるよりはいいんでね?
STLPortってVC6以外で使う意味あったっけ? ハッシュもサポートされたしデフォのやつでいいじゃん。
オレは、デフォはメモリリークが発生するってうわさを聞いて導入したんだけど、 実際のところどうなの?
どこでメモリリークすんの?
むしろSTLPortのアロケータがやばいという話なら聞いたことがあるが
STLPort4.6系はリークする。というかそういう設計にしているみたい。 5.0系は#define _STLP_LEAKS_PEDANTICしてビルドするとリークしないらしい。
STLPortは別にメモリリークしてるわけじゃなくて内部的にプールしてるのをメモリリーク検出ツールが誤検出するってだけじゃなかったか? PEDANTIC(知ったかぶり)ってのが中の人の見解を如実に表してる希ガス
/* boost 話ではないが、超興味津々だから続けてくれー。あとでドキュメントも自分でおさらいする */
なんだかんだでDinkumが一番信頼できるんだ罠。6.0はそもそもANSI準拠してなかったけど、 7.1からだいぶ増しになった。某ランドも乗り換えるらしいじゃん。
STLPort,5.0RC4だとjamファイルとかソースいじらないとBoostのビルドが 出来ないね。RegexとかThreadとか。
STLPortは4.6系と5.0系は失敗作だったから 4.5.系使えとか言われてなかったっけ?
boost1.33.0のwaveというライブラリのinstantiate_cpp_*.cppというファイルを コンパイルしているときかならずcl.exeがBuffer overrun detectedと書いてある ダイアログを表示してくるのですが何かの演出ですか?
つーかboostのwaveって何なの? マニュアルの3行目位まで読んだ限りでは spiritの進化版っぽいけどそれでOK?
spiritを使ったC/C++プリプロセッサライブラリだってさ。
>マニュアルの3行目位まで読んだ限りでは 次の段落ぐらいまで読めば何のライブラリかぐらいは分かるはず
一瞬見たときはオーディオ関連のライブラリキターと思ったよ。
なんでwaveなのかよくわからん
それはなぜspiritだとかphoenixなのかと同じくらい難しいな
一瞬、tangle/weave から引っかけたかとおもたが…ちょと脈絡なさすぎかな
なんかの頭文字じゃないの?
Boost.Spirit の質問です。 int_p のセマンティックアクションで、std::vector に取得した数値をpush_back したいのですが、分かりやすい方法だと、vector<int>:push_back のラッパ関数を作って、 それをセマンティックアクション関数としますが、 直接push_backをコールすることは出来ないでしょうか?: // global vector<int> v; // grammar 派生クラスのコンストラクタ内 my_rule = int_p[&v.push_back]; こんな感じでかけないでしょうか? 上記コードだとコンパイルエラーになります。 >sp.cpp:36: error: no match for 'operator[]' in 'boost::spirit::int_p[ v.push_back]'
638 :
age :2005/08/21(日) 11:09:48
>>637 メンバ関数ポインタと bind 使えばできるんじゃないかな?
記述が泥臭くなりそうだけど。
641 :
デフォルトの名無しさん :2005/08/21(日) 13:50:28
今日VisualStudio2003環境にboostを入れてみた。
最初間違って -sTOOLS=vc7 としたら、
>>628 の症状を食らった。
後で気付いて -sTOOLS=vc-7_1 でやり直したら、まったく平気だった。
なんか cygwin のパッケージになったみたい。 普通の zip パッケージで十分な気がするけど、意味あるのかな?
>>643 ソフトのインストールに許可が要る会社では(既にcygwinを入れてる場合)
許可取る手間が省ける希ガス
FileSystemでWindowsのFindFirstFileの様にファイルを列挙する事は出来ますか?
FindFirstFileはいつからファイルを列挙できるようになりましたか?
うぃ、Nextと合わせてそーいう風に使った時の様に、ですね。 釣られてんなー。
確かにMFCのラッパークラスも列挙してくれないしなぁ。 結局自前でファイル名のvectorを返すクラスを作る羽目になる。
いや、わざわざ作るならiteratorだろ。
bi-directionalやrandom iteratorが必要な時は、 vectorを作っとくって選択肢もあると思うよん。
ないと思う。
みんな、filesystemとかalgorithm/stringとか、日本語の問題はどうしてるの?
>>652 filesystem はともかく、algorithm/string の方は何か問題ある?
>>653 trimとかstarts_withみたいな対象位置が固定されてるの以外はたぶん全部アウト。
shift_jisだと2バイト目にASCIIが来ることがあるから。
じゃあ wchar_t で Unicode が扱える環境で wchar_t の文字列を扱う分には OK?
>>655 OK。
regexとかもそうやって使うのが普通になっちゃってると思う。
でも全体をUnicodeにしようとすると、
wchar_tへの対応がboostどころか標準ライブラリまで中途半端なんだよね…
標準ライブラリに関してはfstream類がファイル名にUnicodeを受け付けてくれれば俺は十分だ。
Unicodeの処理系というかクラス作るのは正規化その他が必要で面倒だな。 外の世界とやり取りする時にNFCとかしないとどうにもならないもんな。
なぜ boost::intrusive_ptr は以下のコードがコンパイルエラーになる 仕様にしたのでしょうか? #include <boost/intrusive_ptr.hpp> struct A { int count; A() : count(0) {} }; void intrusive_ptr_add_ref(A* a) { ++a->count; } void intrusive_ptr_release(A* a) { if ( --a->count == 0 ) delete a; } void foo(boost::intrusive_ptr<A> p1, const A* p2) { p1 == p2; }
こんなところで訊いても作者は見てないと思うぞ。
intrusive_ptrはconst *とはなじまんだろ。 void foo(boost::intrusive_ptr<A> p1, A* const p2) { p1 == p2; }
鼻血マン?
>>662 いや、「はなじまん」であって「はなぢまん」ではない。
つまり、「花自慢」だ。
>>659 おまけで生ポインタとの比較演算子を入れて中途半端になっただけじゃない。
const A* だけじゃなくて、Aの基底クラスへの生ポインタとも比較できないし。
boost::shared_ptrやstd::auto_ptrも生ポインタとの比較演算子は定義していないよ。
build自体でこけてる俺はいったいどうすれば C:\boost_1_33_0>bjam -sTOOLS=vc-7_1 --prefix="C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7" Building Boost.Regex with the optional Unicode/ICU support disabled. Please refer to the Boost.Regex documentation for more information (and if you don't know what ICU is then you probably don't need it). Jamfile:249: in load-jamfiles *** argument error * rule stage ( name : sources + : requirements * : local-build * ) * called with: ( include/boost-1_33 : : <locate>C:\Program Files\Microsoft Visu al Studio .NET 2003\Vc7 <tree-subdirs>C:\boost_1_33_0 <target>all : <suppress>tr ue ) * missing argument sources C:\boost_1_33_0\tools/build/v1\boost-base.jam:2329:see definition of rule 'stage ' being called C:\boost_1_33_0\tools\build\v1\bootstrap.jam:21: in boost-build C:\boost_1_33_0\boost-build.jam:16: in module scope C:\boost_1_33_0>
事故解決した。スマソ
667 :
デフォルトの名無しさん :2005/09/18(日) 21:48:16
VARARGS32.batを実行し忘れたなんてつまらん落ちじゃ…
いや、ディレクトリのコピーミス。 今は、MacOSのをビルドしている。
let's boostの通りvc7.1に入れようとしたんですが、全てskipされてしまう。 ビルドできない理由にはどんなのがあるでしょうか。pathとかに何か余計な事書いてあるのかな。
>>669 bjam -sTOOLS=vc7_1
vc7.1→vc7_1
しかしLet's boostにもvc-7_1と書いてあるのだが。
673 :
デフォルトの名無しさん :2005/09/21(水) 17:33:47
こういうやつは、インストできても使いこなせまい。 Boostは相当難解なマニュアルをよまなきゃ使えないから。 せめてエラーメッセージから問題を解決する糸口をつかめる ようでなきゃダメ
使うのだけビルドすりゃいいんだけどな
unit_test.hppの BOOST_LIB_NAMEが unix_test_frameworkになってるんだが、 boost_unit_test_frameworkの間違いだよね?
boost::bindが返す関数オブジェクトを呼ぶとき、右辺値を渡せないのにやられた。 とりあえずboost::functionで回避できたから良かったけど。
>676 boost::crefとか
boost::馬鹿まるだし
boost::戦車でやってくる
toost::山崎パン
681 :
676 :2005/09/23(金) 10:50:01
>680 もしかして: toast
683 :
デフォルトの名無しさん :2005/09/23(金) 13:54:43
> 680 名前:デフォルトの名無しさん [sage] 投稿日:2005/09/23(金) 10:22:23 > toost::山崎パン m9(^Д^) プギャー
boast::パン焼きライブラリ
boost::net と boost::gui まだ?
インスコで行き詰まる奴が続出する時点でC++の未来はないな boostが標準化されるといううわさは何だったんだろうか
↑事実無根の噂に踊らされる馬鹿
boostは次期標準のたたき台にするって意味はあったとしても それ自体が標準になるってことにはもともとなってない C++0x(っていうかその前のTR1か?)ではスマートポインタとかが かなりそっくり取り込まれてるよな
D言語がC++の居場所を奪うまでの我慢だな
>>689 たぶんその時代はこないだろうけど。
・
・
・
・
・
・
C#がメインストリートを歩んでいくから。
でもC#って意外なほど普及遅くない? 発表から5年くらい立ってるよね
C#ではC++を置換はできんし、C++/CLIが来るからC#自体どうなることやらだ
まあドトネト自体は言語に縛られないからいいんだろうけどね
>>685 それよか boost::container_adaptor と boost::container_facade が欲しい。
695 :
デフォルトの名無しさん :2005/09/24(土) 15:35:57
boostがインストールされている環境とそうでない環境で同一のファイルを使うために、 #ifndefなどでboostがある場合と無い場合を書きたいのですが、boostで定義される特有の ものはないでしょうか?
>>695 仮にそういうマクロがあったとしても、そのヘッダの前にincludeされていないと
感知できないわけだが、それでもいいのか?
いいなら、BOOST_CONFIG_HPPをテストするのはどうだろう。
>>925 メッセージの最大許可長の倍のバッファを用意して
実際のリードバッファはそのバッファの中を移動させながら使っています。
\0から逆方向にもパースできる書式なので、死んだメッセージ以外の読みもらしもありません。
ただTCPを使ってる以上は不正の段階で切断でもいいかも知れませんね・・・
ごめんね
E・∇・ヨノシ <700ゲット♫
program_optionsってwgetoptの代わりに使えるの?
正直に「貴様のような試しもしない糞野郎が憎くてしようがない」と書けばいいのにな 「いいよ。」だってさ。二週間言いたくて見張ってたんだろうな
>>703 自信の狭隘な視野でしかものを見られないと恥を掻く典型だね。
706 :
デフォルトの名無しさん :2005/10/16(日) 08:58:43
こんなんで博学って、どんな教養の無さなんだろう ;-)
707 :
デフォルトの名無しさん :2005/10/16(日) 10:10:12
boostっていつ標準に組み込まれるの?
>>707 C++ 0xに。
もちろんboostの全てが組み込まれるわけではない。
C++/CLIは言語にlambdaを組み込んじゃったよね。 find_if( v.begin(), v.end(), { return _x == 3; } ); MicrosoftにはLippmanとかSutter強者がいるから、 C++ 0xが分けわからん状態にならんように頑張って欲しい。> JTC1/SC22/WG21
string_algoが入らないなんてあり得ないな
http://boost-consulting.com/vault/index.php?&direction=0&order=&directory=TR1 Functionality supported includes:
・ Reference Wrappers
・ Smart Pointers
・ Class template result_of.
・ Function template mem_fn.
・ Function Object Binders.
・ Polymorphic function wrappers.
・ Type Traits.
・ Random Number Generators and Distributions.
・ Tuples.
・ Tuple Interface to std::pair.
・ Fixed Size Array.
・ Hash Function Objects.
・ Regular Expressions.
・ Complex Number Algorithm Overloads.
・ Complex Number Additional Algorithms.
Functionality in TR1 but not yet available:
・ Mathematical Special Functions.
・ Unordered Associative Set (Hash Table).
・ Unordered Associative Map (Hash Table)
・ C99 C language additions.
一番新しい Draft は N1836 かな。 しかし、N1885,!886 がすごく気になる…
「boostはまだ死んでなんかいない。見よ、この発展を!」ってとこか。
>>709 そもそも lambda の言語ネイティブでのサポートというのは,
C++ の基本的な設計理念と非常に相性が悪いように思うんですけれど,どうなんですかね?
>>715 私の理解が正しければ,今現在の concept に関する提案では
Stroustrup & Dos Reis のもの (N1510, N1522, N1536, N1782) と
Gregor, Siek らのもの (N1758, N1849) の2つが競合している状態だったはずです.
各々の proposal をちゃんと読んでないので,各々の長短所が何なのかとかは
いまいち理解してないですけれど.流し読みした限りではあまり違わないような?
>>716 無名文字列リテラルとか昔からあるわけだし、
もっと早くから無名関数が有っても良かったような・・・
もうexpression templateがあるしなあ。 x => x * x C++/CLIはこんなんになるみたいだが。
やっぱり関数型言語へ近づいていくんですね。
autoとかdecltypeとか型推論も激しくなってきたしなあ。 decltype、キーワードはtypeofにして欲しいのう…
>>719 高階関数はともかく単なる無名関数なら
単に記述性の問題だけのような気がする。
アセンブラ定数や文字列はラベルを付けずに式中に簡単に
記述できたのに、関数だけが態々別途定義して参照する必要
があったのは、その辺りだけアセンブラみたいなスタイルで
実際不便だったし。
安易に拡張するとスコープやクロージャの問題が出るけどね。 ETなら問題ないけど。
>>721 いまのC++と関数型言語の違いは主に記述性にあると思うんだが。
724 :
デフォルトの名無しさん :2005/10/18(火) 21:48:21
最大の違いは、推論のある型システムだろ。
スコープ等の問題まで見据えたときに,効率や安全性その他も考慮してなお
標準化に耐えうるだけの,C++ コミュニティ全体のコンセンサスが得られる
ラムダ式の仕様拡張の妥協点を見出すのは非常に難しいと感じるのですが
どうなんでしょうか?
個人的には,言語ネイティブでのサポートよりも,どちらかといえば
(Boost.Lambda 以上の豊かな表現力を持った)ライブラリレベルでの解法が出現する
可能性の方がまだ見込みがあるのではないかとさえ考えるのですが…….
>>720 今のところ decltype と typeof で微妙に機能が違うように提案してたと思います.
>>722 ET だと問題ないのはどうしてですか?
>>725 > ET だと問題ないのはどうしてですか?
Expressionそのものはfirst classのobjectじゃないですよね。
生成された構造木はfirst classのobjectですが。
構造木の生成はプログラマが制御できます。というしなければなりません。
# bindingはこの生成時に解決されます。
だからクロージャ問題がありません。λ式と違って。
ETはコンビネータによるλ式の実装に似ていますよね。
なあ、ETって何? 例の宇宙人の映画?
Expression Template
お前が解読しろ
Spiritで、セマンティックアクションでクラスのメンバ関数を呼び出すにはbindを使えということですが、 class Klass:public grammer<Klass>{ public: void hoge(const char* first,const char* last); template<typename S> struct definition { rule<S> expr; definition(const Klass& self) { expr = *(alpha_p | '_')[bind(&Klass::hoge,self, _1,_2)]; }; }; }
うあ、途中で切れた。
>>731 のコードだと
error C2440: '引数' : 'const Klass *' から 'Klass *const ' に変換できません。
と言われます。何か自分が勘違いしてますでしょうか?
環境はVC7.1+STLPort4.6.2+boost1.33.0です。
>>731 selfはconst Klass&だから非constなhogeを呼べない。
無茶初歩的やん!
735 :
デフォルトの名無しさん :2005/10/30(日) 00:17:44
>735 >TREE_TO_XMLとか構文解析木辺りを知りたいのです。 それだとあまりオススメできないかな
ないにょ
LISPでも勉強した方がマシ
739 :
デフォルトの名無しさん :2005/10/30(日) 09:18:27
741 :
デフォルトの名無しさん :2005/10/31(月) 09:12:14
>>740 TREE_TO_XML辺りの記述もありますね。
ISO8859-1固定か・・・。
742 :
デフォルトの名無しさん :2005/10/31(月) 19:00:47
「制御の逆転」 の場合でもiteratorパターンを使いたいのですが、 通常のscope外でも動作し続ける for文ぽいものってあるのでしょうか? boost statechartで可能?
743 :
デフォルトの名無しさん :2005/10/31(月) 23:50:01
こちらで聞いてみてはと誘導されました。 serializationで抽象クラスのポインタシリアライズがうまくいきません。 ポインタシリアライズの場合constってどうすれば・・・ どこかにサンプルコードとかありませんかね?
const_cast
Boost Graph LibraryもココでOKですか?
多分ここが最適でしょう>Boost Graph Library
747 :
デフォルトの名無しさん :2005/11/05(土) 08:16:45
MPLってのはModernC++Designで使われてるLokiの役割をカバーしてるの?
>>747 基本的なメタプログラミングの道具(typelistとか)はカバーしてるけど、
デザインパターンの具体化のようなものは無い。
749 :
デフォルトの名無しさん :2005/11/05(土) 08:33:42
boost thread にはthread allocatorのようなものないのかな... MFCでも使えるんだろうか...
ptr_mapはデフォルトコンストラクタがないクラスを扱えないのか? /boost/ptr_container/ptr_map_adapter.hppの171行目の value_type res = new T(); // strong が原因みたいだけど shared_ptrを使うしかないのかな
boost::shared_ptrをstd::shared_ptrと書ける日が来るのはいつですか?
シラネ。 前回のアップデートが2003だから、次は2008?
using boost std;
Boost1.33.1Betaが来てるわけだが read_write_mutexが削除されてる.・゚・(ノД`)・゚・。
なんか、デッドロック起こすらしいけど…
お久しぶりです。500あたりでディレクティブとスキャナについて質問した者です。 前の問題は荒技でなんとかなったのですが…。 抽象構文木の解析でposition_iteratorを使ってエラー行を出力させてるのですが、 解析そのものが失敗したときはast_parseの返却値のstopを取得すればエラー行が分かるようですが、 評価のときにnode_val_dataのイテレータがposition_iteratorではなくてconst wchar_t*とまんまなので困っています。 ソースを見たらstd::iterator_traits<IteratorT>::value_typeで中身が暴かれてしまっているのが原因かなと。 おそらくコピーを保持しているからだと思うのですが…。 構文木の評価にもposition_iteratorを利用しようとしていることそのものがだめなのかもしれません。
Boost Test Libraryで質問です。 横着して #include <boost/test/auto_unit_test.hpp> を読み込んでから BOOST_AUTO_TEST_CASE ( ... ) でテストケースをどかどか追加しているのですが、この方法でテストケースの実行順序を 明示的に制御することはできますか?より下位の機能を試験するテストケースを先に 実行するように並べたいのです。テストケースは複数ファイルに散在しています。
Boost Graph Libraryでvertex(integer, graph);で引っ張ってきた vertex_descriptorから元のintegerを調べる逆写像みたいなのって用意されてないの?
760 :
デフォルトの名無しさん :2005/11/23(水) 07:32:41
namespace fs = boost::filesystem; try{ fs::path dir("c:/usr"); }catch(exception &e){ cerr << e.what() << endl;} としたら、実行時に、 boost::filesystem::path: invalid name "c:" in path: "c:/usr" という例外出てしまうんですが、何がまずいんでしょうか? cygwin g++ で、boostライブラリは配布サイトから持ってきたものです(cygwin同梱ではない)。
はて、文字通り"C:"がいかんと言われているようだが。 #そもそもCygwinにはドライブの概念がないのだよね。
cygwinでC:にアクセスしたい場合は /cygdrive/C/usr にしないとね
>>762 やっぱダメみたいです。
boost::filesystem::directory_iterator constructor: "\cygdrive\c\usr": 指定されたパスが見つかりません。
Cygwinのパスシステムがネックになってるみたい。
\じゃなくて/というオチは?
/ で指定していますが、イテレーションしているところで
>>763 の例外が出ています。
path::normalize() とかやってみたけど、やっぱだめ。
とりあえず、filesystemのソース読み中・・・。
fs::path dir("c:/usr", fs::native); VC++だけどこうしたらできた。もちろん'/'だけでなく'\\'でも問題なし。
767 :
760 :2005/11/23(水) 10:35:46
>>767 ライブラリのコンパイル時にBOOST_POSIXマクロを指定しろと書いてあるね。
ユーザプログラム側で指定する必要はない、と
>>757 以下が 757 さんがやりたいことかどうか分からないですけれど,
typedef position_iterator<wchar_t const *> Iterator;
typedef node_iter_data_factory<Iterator> NodeFactory;
typedef tree_parse_info<Iterator, NodeFactory> ParseInfo;
Iterator first = /* 入力の開始位置 */;
Iterator last = /* 入力の終了位置 */;
ParseInfo info = ast_parse(first, last, your_rule, NodeFactory());
こうすれば tree_node の value.begin() と value.end() が,
そのノードに対応する入力シーケンスの範囲を指してくれます.
ただ,node_iter_data_factory を使う場合構文木を操作する間
入力シーケンスを維持しないといけないという制限が出てきます.
>>758 翻訳単位が分かれているなら諦めるしかないと思います.
恐らくグローバルオブジェクトの初期化順序と同等の問題になるでしょうし.
>>759 adjacency_list を使っているのだと思いますけれど,
VertexList のコンテナとして vector (vecS) を指定しているなら
vertex_descriptor がそのまま頂点の番号として使えます.
Vertex u = vertex(0, g);
std::cout << u << std::endl;
より汎用な形で書きたいなら
std::cout << get(vertex_index_t(), g, u) << std::endl;
という書き方があります.こちらの書き方のほうが好ましいです.
VertexList のコンテナとして vector 以外を指定している (例えば listS) なら
以下のような形でユーザ側で頂点のプロパティを管理しなければならないです.
typedef property<vertex_index_t, std::size_t> VertexProperty;
typedef adjacency_list<listS, listS, directedS, VertexProperty> Graph;
typedef graph_traits<Graph>::vertex_descriptor Vertex;
Graph g;
Vertex u = add_vertex(g);
put(vertex_index_t(), g, u, 0);
Vertex v = add_vertex(g);
put(vertex_index_t(), g, v, 1);
Vertex x = vertex(1, g);
std::cout << get(vertex_index_t(), g, x) << std::endl;
771 :
759 :2005/11/23(水) 20:27:59
>> 770 どうもです。BGL使ってる人は居ないんだと思ってスルー覚悟してました。 adjacency_listを使ってますが・・・難しいですね。C++。 本家のドキュメント読み漁って所望の動作は実現できるようになりましたが これがベストな解なのかまったく自信がないです。精進したいので参考になる サイトとか書籍とか(一冊だけ出てるみたいですけど)教えていただけると幸いです。
772 :
デフォルトの名無しさん :2005/11/23(水) 20:55:15
>>771 英語版があるらしいので、君が翻訳してくれると助かる。
boost使えねえ…
>>774 (理解力が足りなくて)boost使えねえ…
(馬鹿上司のせいで)boost使えねぇ…
泣けるな >776 VC6でも使っているの?
現場じゃまだ使ってるところもあるのか…。
VC++4.2だって普通に使われてるぞ
boost禁止令は結構見かけるけど、一体どういう理由なんだ? 新しいライブラリを導入して現場を混乱させたくないってのが主なのかな
>>780 現場のレベルも考えずに、自称”できるPG”のバカがトリッキーな技を仕込む。
永遠のベータ版みたいなライブラリを入れてどうしたいんだ
作業を楽にするために活用したい、に決まってるじゃん。 お前はライブラリに対して何かそれ以外のことをしてるのか? 毎朝心を込めて朗読でもしてるとか。
大体「boost」ってひとくくりにして、 > 永遠のベータ版みたいなライブラリ って言われてもね。
VC++2005ExpressでBoostがうまくビルドできない。 VC++7の時のやり方で普通にやると「オプションが廃止された」とか出る。 その後ネットで調べ、エラーが出なくなったので組み込んでみると、VC++2005Expressの方で「コンパイラオプションが違う」とか出るorz 1.33.1betaをVC++2005Expressでちゃんとビルドできた人、アドバイスお願いします。
1.33.0 だったら vsvars32.bat をいじれば ビルドできたけど、1.33.1 はやってないからわからん。
>>767 これって、どうやってマクロを定義するの?
bjam 使って、コンパイルスイッチマクロのON/OFFする方法が分からない。
どっか、詳しい情報無いですか? できれば日本語で・・・
788 :
759 :2005/11/25(金) 23:18:54
>> 770 ユーザ側で頂点のプロパティを管理する場合、インデックスは0から連番で登録して いかないと意味をなしませんか? 他のところで管理しているデータとの対応を取るためにそちらのIDを入れてみると IDを手掛かりに頂点を引っ張って来ようとしたときに登録した番号に対応する頂点が 見付からなかったり、まだ登録してない番号の頂点が見付かったりします。 ビジタとか使ってグラフ操作で楽できればいいなぁと思ったのですが、楽するどころか やりたい処理内容まで到達できずにくじけそうです。何といってもコンパイルエラーから 原因を突き止めるのが大変だし・・・疲れたな orz
>>786 1.33.0だとOKでしたか。
1.33.1でも試してみたいので、その際にいじったやり方を教えてもらえないでしょうか?
色んな型のデータを格納できるコンテナみたいなのありますか?
boost::variant
boost::any
boost::tuple
ゴミみたいなライブラリかき集めてで優越感に浸る それがboostクオリテ
>794 お前がboost嫌いなのはよく分かったから落ち着け、な?
796 :
790 :2005/11/27(日) 00:54:15
すいません。 それでイテレーター付いていて、くいくいと順に値を取り出せるような奴あります?
>>796 boost::variantとboost::anyは共用体のように排他的であり、
複数の型のデータを同時に保持しているということはありえない。
#include <iostream> #include <string> #include <vector> #include <iterator> #include <boost/variant.hpp> #include <boost/any.hpp> using namespace std; typedef boost::variant<int, double, string> item_type; void print_type(item_type &item){ cout << "[ type id = " << item.which() << " ] " << item << endl; } int main() { vector<item_type> v; v.push_back(123); v.push_back(3.141592); v.push_back("あいうえお"); for_each(v.begin(), v.end(), print_type); return 0; }
799 :
798 :2005/11/27(日) 01:07:29
途中で送信しちまった。 これが一番、やりやすそうだな。と、コメント入れ忘れた あと、any のインクルード消すの忘れてた。
>>795 自分の頭の出来が原因で嫌いな場合、落ち着くことはとても難しいと思います :-)
>>799 ほほう。面白いな(・∀・)
WTLでリストビューをオーナーデータにして使ってるんだけど、
整数型・浮動小数型・文字列型・日付型なんかに合わせてソートを実装したいと思ってるけど。
うまい実装法が見つかりそうな気がした。
具体的に言えばSQLとかで取ってきたデータを整理するのに使いたい。
気付いたら俺のプログラムでBoostで使ってるライブラリはMersenneTwisterくらいでした。
SandBoxにGUI扱うためのクラス群が上がってるけど、実用に至るのはいつ頃だろうな。
Cocoaなんかもある。純粋なC++で使えるんかいな。
文字列型をクソ真面目に文字列比較でソートする必要はない。 初回オンリーの真面目ソート時にあらかじめ重み付けされた値を付与させておいて、 以後はその値でソートする。ま、常識か。
もちろんそれは理解している。 俺の場合は、単純に先頭をsizeof (int) 個分だけ取り出して (str[0] << 24) | (str[1] << 16) | (str[2] << 8) | str[3] とかやっておけば大概の場合はよくね?とか思っている。 まあBigEndianならこの演算自体不要だね。普通に読み出せば文字列の先頭バイトが上位にくる。 でもBigEndianなプロセッサって大概、アラインメントの制約厳しい気もす。 まあ、文字列本体とは別に4バイトや8バイトデータサイズが増えたってさして気にするこたないけど。
誤爆じゃねーの?
805 :
757 :2005/11/27(日) 22:38:54
>>769 遅れてすいません。
解決しました。ありがとうございました。
806 :
デフォルトの名無しさん :2005/11/28(月) 04:49:44
VC6でsignalってプリコンパイルできない?
だが断る
>>789 INCLUDE と LIB にそれぞれ
Platform SDK の include と lib のパスを追加しました。
試してみたら 1.33.1 もビルドできましたよ。
810 :
806 :2005/11/28(月) 13:56:51
boostのドキュメントがPDFになっているところありませんかね? 印刷して電車で読んでいるんだけど、 HTML版は大きいのはページが分かれていて印刷するのが面倒だから。 DocbookからPDFにするいいツールを持ってないし。
PDF吐くだけならポストスクリプトドライバとGSがあればOKす。 紙で読むなら例のBOOST本のほうがいいんでね?
PDFが欲しいって言ってんだろ?
Pluckerに突っ込んで通勤電車はCLIEで読書これ最強。
BGLでreverse_graphで反転させたグラフのプロパティが引っ張れないんだけど、 これどうしたらいいのか教えて偉い人。 コンパイルのエラーを眺めてみると反転前グラフのプロパティを反転後グラフの プロパティに変更しようとして失敗してるっぽい。カスタムエッジプロパティとか カスタムバーテックスプロパティとかてんこもり突っ込んでるからだめなんだろか。 そもそもエッジの向きを反転させただけで別クラスのオブジェクトに変更しないで 欲しいんだが・・・BOOST難しくてどう逃げたらいいのかわかんね。
819 :
デフォルトの名無しさん :2005/12/12(月) 17:14:06
_ ┌――─┴┴─――┐ │ セルフサービス .│ └―――┬┬─――┘ ││ ./ ゛゛'゛'゛ / / | \/ \ \ \ノ
>>820 Config Headerいじってbjamした?
cygwinの奴をboost-1.33_1にアップしたらregexがマトモに動かなくなった、 1.33に戻したら動くみたいだけど。
BGLで質問 adjacency_listで同じプロパティをもつ頂点を追加しないようにする方法ありませんか。 辺の重複はチェックできますが、頂点の重複チェックは思うようになりません。 プロパティを別変数に持つのはエレガントではないので。
vc2005でコンパイルしてみたんだけど やたらと警告が出るのは仕様?
>>826 俺も VC2005 入手したからやってみよっと。
とりあえずC4819を無効にしたら静かになった。
C4996 の方は _SCL_SECURE_NO_DEPRECATE というマクロを コンパイラスイッチで定義するなりすれば回避できます. C4819 の方はどうも日本語版でのコンパイルでのみ現れる警告のようで, lexical_cast.hpp や is_base_and_derived.hpp 等のファイルに書かれている 著作者名の文字コードに起因する警告かと思います. どちらの警告も Boost のコードに対するものなら放置しても 問題はないと思います. C4819 の方は,うっとうしいなら コンパイラスイッチ (/wd) やプラグマ (#pragma warning) で消すなり, 警告にあるように該当するファイルの文字コードを変換するなり, あるいは根治治療するなら boost-dev あたりにレポートしないと.(恐らく未報告)
確かそれはバグとして報告上がってたな。 表示できない文字は含んでねえっつーの。
む.コンパイラ側の問題でしたか.それだと boost-dev は関係ないですね. せっかく beta でバグリポート上がってたのに結局対処されなかったのか…….
C4819 は日本語版で現れるなら 他の言語版でも現れる可能性もあるわけだから、 やっぱそういう文字は取り除いておいた方がよくね? って思ったが、そんな内容のメール投げたら 「極東の猿は黙れ」って言われそうだからやめとく(笑
>>827 漏れも試してみたいんだが、VS2005は、どこでダウンロードできたんだっけ?
Boostの正規表現クラスって、ググると reg_expression<char> regex = "<img +src=('|\").*('|\") *>"; みたいな使い方をしてるサンプルが結構あるんですが、 正しくは reg_expression<T1,T2>なんですよね? バージョンによって結構差異があるんでしょうか?
>>835 Boost.Regex
Class reg_expression (deprecated)
-
The use of class template reg_expression is deprecated: use basic_regex instead.
>>836 ありゃ、もう deprecated でしたか。
とりあえずヘッダファイル見たら boost::regex と boost::wregex
を使えといわんばかりに typedef されていたので、
boost:regex と boost:wregex を使うことにしました。
正しくは、とか言っときながら自分で確認もしてなかったのかよ
それ、「正しくは」は関係無いでそ。
reg_expressionってεπιστημη氏のページのサンプルがそうなってるよね。 アレは古いっしょ。 俺的にはマルチバイト対応してるonigurumaを推奨。てか1.33でRegex++重たくなって萎えた。
MkDir1 とか言うのに失敗してインストールできない。 どうすればいいんでしょか… ググり続けること半日。 全然解決法がみつかりません。 Win XP SP2 VS.net 2003 だれかヒントくださいお願いします。
>>841 自己解決!
参考までに、
vcvars32.batが環境変数をSETするのに何故か失敗していた模様。
手動で必要な環境変数を設定すると成功。
あーつかれた…
>>843 STLportのnode allocatorが原因
boostとは無関係
ublas使ってる人いる? 1.32.0で通るコードが1.33.0で全然ダメでしたorz どうもublas的には1.32.0の方が堅牢っぽいです ublasの情報少ないし、誰かのためになれば・・・と、一応ご報告
> 1.32.0で通るコードが1.33.0で全然ダメでした 通らなかったコードが欲しいな。 その方がもっとためになる。
Wave使い方わかんね
848 :
845 :2006/01/13(金) 00:59:34
>>846 あまり詳しく原因究明していないから確かなことは言えないんだけど、
LU分解を使って処理しているところが怪しい感じ・・・
lu_factorize とか lu_substitute とかたぶんその辺?
逆行列計算するところでハマリました
849 :
デフォルトの名無しさん :2006/01/14(土) 12:06:26
BOOST_STRONG_TYPEDEF 、俺にはまだ弱すぎる。 BOOST_STRONG_TYPEDEF(unsigned, A); BOOST_STRONG_TYPEDEF(unsigned, B); A a(1); B b(2); unsigned u(3); a=b; u=a; a=u; どれも該当する = 演算子および変換があるから素直にとおる。 なのでもう少し厳しくしてみたら、 stl:vector<A> に対して stl:fill() とかが使えなかった。 そりゃそうか。 しかし BOOST_STRONG_TYPEDEF(unsigned, A) ってことは unsigned が A の基底クラスみたいなあつかいするってことでそ? 実際には構造体 A の要素として unsigned を抱えてるけど。 a が unsigned に代入できるのはいいとして、 a = b とかはコンパイル時にはじきたい。
850 :
BOOST_STRONG_TYPEDEF :2006/01/14(土) 12:14:58
BOOST_STRONG_TYPEDEF(T, D) だと、 explicit D(const T t_); D(){}; D(const D & t_); D & operator=(const D & rhs); D & operator=(const T & rhs); operator const T & () const; operator T & (); operator==(const D & rhs); bool operator<(const D & rhs) const; が定義されるんだけど(実は基底クラスでさらにいくつかの演算子も)、 D & operator=(const T & rhs); がなぁ。 上の例での a = b は、 a 側の A & operator=(const unsigned &) と b 側の operator const unsigned & () const が のケコーンで通るわけだけど、不用意に通したくないんだよな。
851 :
BOOST_STRONG_TYPEDEF :2006/01/14(土) 12:17:04
BOOST_STRONG_TYPEDEF(double, Weight); BOOST_STRONG_TYPEDEF(double, Length); Weight w(10.5); Length l1(30.0); Length l2(31.0); で、 不用意に w = l1 ってやってしまうのを防ぎたいんだよな。 l1 = l2 はもちろんおk
>>849 は stl:fill じゃなくて std::fill のまちがい
operator=の特殊版、定義しなよ。
>>853 クラスの?
それともグローバルで friend の?
>>855 THX ちょっと読んでみるよ。
とはいえ、いまちらっと見た限りでは
結構オーバーヘッドありそうな実装だなぁ。
利便性(安全性)をとるか、スピードを取るか、悩ましい。
とりあえずサンプルつくってスピード測定してみます。
最終的に物理計算なんかの大型計算機で使うライブラリで、
ミスを防ぐようにするために使おうと思っているんですが、
スピードがあまりにも犠牲になるようなら問題だし。
>>856 >結構オーバーヘッドありそうな実装だなぁ。
どこが?
キャストしてるだけに見えるが。
ビルド時間もバカにならんということでは。
どうでもいいけどさっさとvc8に対応してほしい
>>859 え? Visual C++ 2005 で使ってるけど。
うちの会社では1.32.0までしか使ってないけど、 VC8はβ・英語版・日本語版全部問題なくboost使えてるけどなぁ。
862 :
デフォルトの名無しさん :2006/01/15(日) 18:06:41
このライブラリ、ひとまず新しいネタは尽きたっぽいね。
863 :
デフォルトの名無しさん :2006/01/15(日) 19:18:06
ublas::matrix mat(2,3); std::cout << mat; とすると 最初に行列サイズが表示されるので saveした結果を別なもの(matlabとか)から呼びだせない。 最初に行列サイズが表示されないようにするオプションとかない?
>>863 boost/numeric/ublas/io.hppを見れば分かるけど、
s << '[' << size1 << ',' << size2 << "](";
とベタ書きされてるから無理。
行列の表示程度なら1から書いてもそんなに労力はかからないんじゃない?
865 :
デフォルトの名無しさん :2006/01/16(月) 10:25:59
>> 864 やっぱりだめですか 素直に自分で書きます。
./a.out | tail +2 > result.data じゃ駄目なんか?
boost/numeric/interval.hpp を眺めていると template<class T, class Policies> template<class T1, class T2> inline interval<T, Policies>::interval(T1 const &l, T2 const &u) { if (checking::is_nan(l) || checking::is_nan(u) || !(l <= u)) set_empty(); else { rounding rnd; low = rnd.conv_down(l); up = rnd.conv_up (u); } } のような関数がたくさん出てきます。template が 二重に使ってあるのですが、T1 や T2 は テンプレートをインスタンス化するときに いったいどこで指定するのでしょうか・・・・ 実際に使うときには boost::numeric::interval<unsigned> unsigned_interval(20,30); のようにするのですが、T1,T2 はいったいどこへ・・・ そもそも二重のtemplateを使ったことがなく・・
interval(T1 const &l, T2 const &u)の実引数は、(20,30)でしょ。
コンストラクタとして interval(T const &l, T const &u) も定義されていて、どっちがマッチするのか混乱してまつ。 テンプレート展開後の状態でのソースを吐かせることが出来ればなぁ。 マクロならプリプロセッサの処理の直後で吐かせて確認できるのに。
>>869 > interval(T const &l, T const &u)
の方が特定的だからこっちが選ばれる。
(2.0, 30)だと
>>867 の方。
>867 クラステンプレートのメンバ関数テンプレートのクラス外での定義って事は解ってる?
>>824 VC7.1だとうちも簡単なサンプルさえ通らなかったよ。
なぜかVC6は通るんだけど...
874 :
872 :2006/01/17(火) 13:04:57
tar.gzでなく、zip落としなおして、再ビルドしたら通ったよ。 なんか手順をミスってたのだろうな...orz
>>874 1.33のヘッダにパスが通ったままで、1.33.1のビルドをしたとか。
876 :
874 :2006/01/17(火) 15:24:16
>>875 vsvars32.bat実行した後に
違う-sTOOLS実行したせいか、
もしくはregexのuser.hpp変更してbjamし忘れてたのかも...
ttp://miyano.s53.xrea.com/cgi-bin/sb/log/eid9.html のソースに
#include <fstream>
#include <string>
#include <boost/serialization/nvp.hpp>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/archive/xml_iarchive.hpp>
#define BOOST_LIB_NAME boost_serialization
#include <boost/config/auto_link.hpp>
を付け足してVC7.1でコンパイルすると以下のようなエラーが出ます。
boost\archive\detail\oserializer.hpp(131) : error C2027: 認識できない型
'boost::serialization::extended_type_info_null<T>' が使われています。
何が悪いのでしょうか?
878 :
デフォルトの名無しさん :2006/01/18(水) 18:24:37
boost 1_33_0 をvc8でビルドしようとしたらできあがったライブラリの名前が boost_date_time-vc6-mt-gd-1_33.libみたいにvc6がついちゃうんだけど何故? アプリをビルドする際には「boost_date_time-vc80-mt-gd-1_33.libを開くことが出来ません」 となってしまう。 なぜboostをビルドしたときにできるライブラリのファイル名がvc80じゃなくvc6となって しまうんでしょう??
>>878 bjamを実行する時
-sTOOLS=vc-8_0
にしてる?
880 :
876 :2006/01/19(木) 05:44:48
>>878 参考までに
1.PlatformSDKの環境変数を通す
2.VC8の環境変数を通す
3.bjamのディレクトリまで移動
4.bjam "-sTOOLS=vc-8_0" stage
という手順を踏まないと正常にビルドできなかったよ。
881 :
878 :2006/01/19(木) 09:34:18
>>879 うぉー サンクス
-sTOOLS=msvcでやってたよ。
882 :
デフォルトの名無しさん :2006/01/19(木) 15:18:50
vc8でアプリをビルドする時、boostのdll版のライブラリ(*.dll)とリンクして欲しいんだけど、 スタティック版(lib*.lib)とリンクしようとしているようでビルドエラーになります。 vc7.1の時は何も指定しなくとも自動的にdll版のライブラリとリンクされてたんですが。 アプリ(ソリューション)自体は同じものでvs8の変換機能でvs8用に変換しただけです。 BOOST_ALL_DYN_LINKを指定しても同じです。何か他に設定しないといけないんでしょうか? (boostは1.33.0です)
>>882 ライブラリによって設定が違うから、boost のどのライブラリを使おうとしているのか教えてください。
884 :
デフォルトの名無しさん :2006/01/19(木) 16:42:31
>>883 ありがとうございます
threadとdate_timeとregexです
885 :
884 :2006/01/19(木) 18:14:21
BOOST_ALL_DYN_LINKとともにBOOST_THREAD_USE_DLLを指定したら解決しました
886 :
デフォルトの名無しさん :2006/01/20(金) 13:58:54
何でもかんでもstdに入れるのはどうにかならんのかね
888 :
デフォルトの名無しさん :2006/01/20(金) 14:13:33
>>887 std 名前空間内で適切に名前空間を
ネスとしてくれるならそれでいい。
むしろトップレベルの名前空間は一つのほうがいい。
stdの名前空間ネストして整理してくれると嬉しいなあ。
>>877 archive 系のヘッダは他の serialization のヘッダより
前に持ってこないといけなかったはずです.
binary_[i|o]archive などだと #error で文句言ってくれるんですが,
恐らく xml_[i|o]archive にはそれが抜けているのかと思います.
boost使ってる有名なアプリってなんかある? 参考までに教えてくれ
Photoshop
895 :
877 :2006/01/20(金) 21:52:28
>>890 おっしゃるとおり、archiveのヘッダをserializationのヘッダの
前に持ってくることで無事にコンパイルすることが出来ました。
ありがとうございました。
896 :
デフォルトの名無しさん :2006/01/22(日) 04:03:49
bcc32でコンパイルすると for を含む関数はインライン展開できない という警告がいっぱいでるのですが、これは仕様ですか?
仕様です。
ループ系の構文は一般にインライン展開できないことが多い。
VCだといいけど、Borlandだと警告出るよね。 Borlandは出来ないということでしょうがないけど、VCの場合は どういう展開をしているのかが気になるところ。
>>900 CaseByCase。つーか、スレ違い。
ループがなくても数十ステップにわたる関数なら/i 付けてもインライン展開しないケースも多々あるよ。 __forceinlineなら緩くなるけど確実じゃない。
当たり前のことをわざわざコテでレスかよ。
904 :
デフォルトの名無しさん :2006/01/23(月) 00:08:01
別に展開しようがしまいがかまわないが、標準ライブラリで警告抑止オプションをつけないと 警告だらけというのはやめてくれってかんじ
#pragmaで抑制できないの?某はあんま使ったこと無いけど。
別にレスしようがしまいがかまわないが、専用ブラウザであぼーん設定をつけないと うざいコテだらけというのはやめてくれってかんじ
regexは名前付きキャプチャ使えないのか...
>>907 細かいところで不便を感じたりしたから、
結局イテレータベースで名前付きキャプチャとマルチバイト対応、
ヘッダファイルのみで完結する basic_regex 作ったこともあった。
検索結果はすべてまとめて関数オブジェクトに渡すつくりだったから
再帰検索や、構文解析するのにけっこう便利だったよ。
鬼車をラップしたほうが速くね? boost::onigurumaとか出たら鼻血でそう。
でもregex++は双方向イテレータ定義されてるものにはなんにでも使えるのか。 これはこれで便利なの? リスト構造になってる文字列とかお目にかかったことがないんだが。
vc-8_0-stlportってないみたいだけど VS2005は付属のSTL使えってことでいいんですか?
>>910 charTはコンセプトが合っていれば「文字」じゃなくていい。
トークン列のマッチに使えるのは便利だな
914 :
デフォルトの名無しさん :2006/01/24(火) 13:33:07
>>913 文字に相当するものがトークンってこと?
>>910 双方向イタレータ=リスト構造ってアホですか?
ゴミレスは不要。
UTF-8 は、双方向イテレータ Shift_JIS は 前方向イテレータ
I need Boost NOW!! I need Boost NOW!! I need Boost NOW!! *ghost Fuckin BackFacker!!!
BrainFacker!!!
919 :
>∀<)っ-●○◎- ◆Pu/ODYSSEY :2006/01/24(火) 21:31:37
>>915 regex++にはリスト構造「にも」使える。onigurumaやその他正規表現ライブラリは1次元配列前提。
もしリスト構造かなんかで使えないと何か不便なケースでもあるかなと思って言ったんですが、
それすら通じませんでしたかwww
そりゃ失敬wwwwwwうはwwwwテラワロスwwwww
必死ですね
921 :
>∀<)っ-●○◎- ◆Pu/ODYSSEY :2006/01/24(火) 22:47:20
ついでだけどさ、 Regex++ってsyntax差し替え(SQLやGROBのワイルドカード文字列からオートマトン生成) って簡単にできたっけ? 鬼車にはサンプルがあったんで解りやすかったが。 まぁ別にワイド文字かASCIIかなら悪くない選択肢だと思うけど、 コード変換って正規表現マッチングそのものなみに遅いじゃん。しかも一部の漢字は死ぬし。 できあいのライブラリでダイレクトに判定したいってことになると、Regex++は日本語環境には 不親切といわざるを得ないかと。 1.33でようやく大文字小文字区別あり/なしの動的切り替えサポートしたと思ったらますます重くなりやがるし。 ASCIIでも単純な構文なら鬼車のほうが数倍高速だったり。 (固定文字列部分を抽出して先にBM法で絞り込むから速いそうな)
鬼車も実はマッチは正確でなかったり('A`) 機能拡張だの豊富なオプションだのはいいんだが そんなことより照合をばっちりとやってほしいところ。 最低限の機能と正確なマッチングをキボンヌ。
Xpressive が正式に Boost に採用されたから、 中途半端な Boost.Regex は最早不要になるだろうと予想。
xpressiveのストリームIOを使ったパターン記法に慣れるのにちょいと時間がかかりそうだ
>>923 今のところデフォルトインストールではXpressiveはインストールされないんだよね?
デフォルトでインストールされないというよりか リリースブランチにまだ入っていなかったかと. 入るのは 1.34.0 以降でしょうね. 待ちきれないのなら CVS の HEAD 落とせば入ってます.
927 :
デフォルトの名無しさん :2006/01/25(水) 20:27:55
boost.filesystemとか日本語ファイル名をきちんと読んでくれないしなあ。
929 :
デフォルトの名無しさん :2006/01/25(水) 20:55:29
>>928 そもそもコンパイラ(というか提供されるライブラリ)
によっては std:: のはずの locale すら
まともに実装されていないしな。
930 :
>∀<)っ-●○◎- ◆Pu/ODYSSEY :2006/01/26(木) 22:07:20
BM法とかAC法とかの汎用ルーチンまだですか。 xpressive書いた人ってMSの研究員でGRETAっていう正規表現ライブラリ書いてたよね。 なぜか(hoge)より(?:hoge)のほうが遅い、不思議なエンジンですた。純粋NFAベースらしいけど。
可変長な多次元配列ってないかなぁ。 std::vector<std::vector<T> > hoge とかマジでセンス無いとか思うし。
>>931 boost::multi_arrayでは駄目なん?
>>932 あのインターフェース、ありえんと思うのは自分だけかな・・・。
使ったら使ったで、他の仲間に怒られそうだ。
色々な意味で非常に不満。よく使用するが故にシンプル設計が良いんだけどな。
Perl互換機能は不要、構文はgrep形式でよい、 ただただ正確に漢字を照合して欲しいだけ。 毛深い機能の塊はイラン
>>934 ぶっちゃけ自分で作った方がいいんじゃね?
自分専用ライブラリ
Blitz++のArrayとか探せば結構あるぞ。
というか、センスが悪いとか言われてもどういうことだかさっぱりわからんので もうちょっと詳しい説明を希望する
boostスレなんで、multi_arrayイヤなら他のスレ行くか、 multi_arrayの気に入らないところ話すか、どっちかだよなあ。
>>940 getを無視して適当にこんなんでいいんじゃないの
std::mem_fun_ref(&boost::weak_ptr<T>::expired)
942 :
>∀<)っ-●○◎- ◆Pu/ODYSSEY :2006/01/28(土) 15:09:43
>>935 (?!マッチさせたくない文字列) は無いと不便かなー。
POSIX互換の正規表現で足りてる人はいいだろうけど万能じゃないからな。 Perl互換の正規表現は確かに複雑で理解しにくいが、その分パワフルで魅力的だ。
ホントに複雑な場合はプログラム的に処理し、場合によってはパースすれば良い。 機能盛りだくさんだが不具合が多くて、バグフィックスが永遠に続くような 複雑なプログラムだと信頼を置けないって考えもある。 さらにPerl方式は最長一致で無いから複数の解がある場合の$0の長さの予想がやり難い。
945 :
デフォルトの名無しさん :2006/01/28(土) 17:59:39
> 機能盛りだくさんだが不具合が多くて、 これには同意できない。 > さらにPerl方式は最長一致で無いから これもダウトだな。
ダウトは疑義表明でしかないが 事実に反するという指摘をしたかったのかな
perlの=~みたいに組み込みならともかく、 C++では好きなの使えばいいじゃん。
ちなみにpcreはC++のwrapperあるよ。 大したwrapperじゃないけど。
良くも悪くもPerlの正規表現がデファクトスタンダードになりつつあるな。 grep -Pオプションが使えないと腹立たしい。
きっちり全経路を取って真の最長一致を見てもらわんと困る。
xpressiveってのが入るみたいだけど、 そうなるとC++0xの正規表現には何が 採用されるんだ?
>>951 C++0xに採用されるのは仕様であって実装ではない。
あの、変態的なコマンドラインオプション解析ライブラリも入るの?
954 :
>∀<)っ-●○◎- ◆Pu/ODYSSEY :2006/01/29(日) 15:39:09
#include <cstdarg> で十分だからなぁ現状。 argvがchar配列のポインタ配列である以上、C++特有のイテレータとか意識して再実装する必要ないような。
955 :
>∀<)っ-●○◎- ◆Pu/ODYSSEY :2006/01/29(日) 15:47:50
↑ちょwwww寝ぼけて勘違いwwwwwww
956 :
デフォルトの名無しさん :2006/01/29(日) 18:57:08
boost::iostreams::streamからboost::iterator_rangeをつくりたいのですがうまくいきません typedef io::stream<T> stream_t; typedef std::istreambuf_iterator<stream_t::char_type iterator_t; iterator_t it(stream), end; aaa(boost::iterator_range<iterator_t>(it,end)); microsoft visual studio 8\vc\include\boost-1_33\boost\range\iterator_range.hpp(61) :error C2440: '<function-style-cast>' : 'std::istreambuf_iterator<_Elem,_Traits>' から 'std::_String_iterator<_Elem,_Traits,_Alloc>' に変換できません。
957 :
デフォルトの名無しさん :2006/01/29(日) 20:37:55
VC2005EE + PlatformSDKでbjam使ってインストールしたけど、 threadが使えません(´・ω・`) date-timeは使えるけど… bjamに特殊なオプションがいりますか?
958 :
956 :2006/01/30(月) 01:14:42
できました エラーはaaaの中のせいでした
959 :
デフォルトの名無しさん :2006/01/31(火) 05:52:33
path.hpp の説明で separator ::= "/" // an implementation may define additional separators て書かれてるんだけど、これって、boost のライブラリの インプリによっては / の他にもセパレータを持っていいってことだよね? そうすると、そのセパレータでもルートを表せるってこと? root-directory ::= separator
ここまできてdat落ちはやーよage
namespace bll = boost::lambda; bll::bind(f, bll::_1, ...); こういうことをよくやっていたんだけど、 最近になってADLがあるからこう書けることに気付いた。 bind(f, bll::_1, ...); 特にありがたいわけではないけれど。
>>962 ADL自体はありがたいけど結局ついbll::bindと書いちまう。
自分の癖が未だ抜け切れていないだけ。
漏れは bll::bind(f, _1, ...); とかってしてる
__ / ヽ _____ l ´ ̄ `ヽ、_ _ゝ `ヽ、 -ニ/ ⌒ ト、 , -、 l l , ‐ メ、} ,L_ _ノ . l ,∠-‐' r- L -∠´ヽゝ__フ v‐l | | l l l | ( ヽ|⊂⊃ `ー' ヽノ l `ー、 ⊂⊃ヽ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ゝ、_ r-, ノ < 次スレまだカナ? / ァェ-_ レ__ -‐ \________ / | | ∨ | . / lィ ̄| ム-‐| ゞ l l ハ |
>>970 を超えたら俺の埋め立てスクリプトが火を噴くぜ
980だったかを超えて30分ぐらい書き込みなかったら 消えるんじゃなかったっけ? レス数、時間は曖昧だけどそろそろ危険領域(#゚∀゚)=3
969 :
デフォルトの名無しさん :2006/02/07(火) 03:25:09
Boost 特化の話でもないので、 C++ のスレに書こうかと迷ったのですが、 Boost のヘッダ見て気づいたことなんで こちらに書かせていただきます。 boost/interval.hpp をみていると template<class T, class Policies> class interval { 中略 public: template<class T1> interval(T1 const &v); 中略 }; というクラスがあり、上のように宣言されている コンストラクタの定義を見ていると下のようになっています。 template<class T, class Policies> template<class T1> inline interval<T, Policies>::interval(T1 const &v) { if (checking::is_nan(v)) set_empty(); else { rounding rnd; low = rnd.conv_down(v); up = rnd.conv_up (v); } }
このテンプレートクラスを boost::interval<int> として 使うとき、上のコンストラクタの T1 はどこいっちゃうんでしょうか? どこで特殊化するんでしょうか?
>>970 boost::interval<int> a('c'); // T=int, T1=char
boost::interval<int> b(true); // T=int, T1=bool
972 :
デフォルトの名無しさん :2006/02/07(火) 07:54:54
乙と言いたいところだが 靴を語ってどないすねん
あ〜あ・・・・・ orzz
検索に掛からないのが困るな。
検索エンジンなんかでも boots で 検索しないと出てきにくくなるかもね。 もう、なんか、やるせ茄子
template統合スレを復活していいかい。 タイトル「template統合スレ -- part7 #include boost/」です。
>>977 templateはC++の標準的な機能
C++相談室があるから「template統合スレ」はいらないよ
ポータブルライブラリ統合スレ(BOOST,Loki)
とかの括り方の方がまだよい
閑散としているのだから
STLスレもC++相談室に収束したほうがよいと思う
STLスレを統合すべきと言う話はSTLスレが1000に近づくたびに出るのだが、 次スレを立てる馬鹿が絶えず今まで続いてしまっている。
C++相談室の今の話題は確かにtemplateだね 「template統合スレ」が仮りに復活した場合 その話題は果たして「template統合スレ」でやるべきなのか? C++相談室との住み分けが一目瞭然な名前で頼むよ
templateなんているかよ
>>978 のようにLokiとかも含められるようなスレタイにしたほうがいいかと思われ
・STLスレ → C++ 相談室スレに統合 ※ もし馬鹿が立てたとしてもスルーして落とす ・このスレ → C++ ライブラリ統合スレ(Boost/Loki/etc.) で良い?
>>982 それやると、何でもかんでもライブラリの
話題全部受け入れるってことになっちゃいそうだが。
>>983 ポータブルを入れるか
長いなら前に凖標準ライブラリなんて案もあったな
メジャーなLokiすらスレがないわけだし個別に作るよりは 一緒にした方がスレの速度も落ちない程度になっていいんじゃない? 確かにあまりマイナーなライブラリは答えられる人少ないだろうけど、 いろんなライブラリ使ってる人が集まるといろいろ勉強になるかもしれないし
>>985 まぁそうかもしれんが、各処理系依存のモノまで
持ち込まれても混乱すると思うんだよな。
だから
>>984 のようにポータブルとか準標準とか
っていう言葉は入っていてもいいと思う。
libhogehoge について、とか言われても困る。
マニア向けC++ライブラリ議論スレgora! にしとけ。 boostは必ずしもマニア向けじゃないけれど、 現状、このスレはそうなっているので。
俺は、STL と template(boost, lokiなど) をくっつけほしいな。 C++ ライブラリ統合スレ(Boost/Loki/etc.) とかやったら、 Xercesとかtemplateと関係ないライブラリの話題でてくるぞ。 むしろ、template(STL,Boost,Loki)で、etcなしとか。
STLは標準ライブラリだからC++相談室でいいよと俺は思ってしまう。
いっそのこと C++0x 関連にしてしまうとか
>>988 templateって標準機能だから分ける利点が全くわからないよ
>templateと関係ないライブラリの話題でてくるぞ。
環境に依存しないのであればいいと思うよ
>>988 vectorのoperator[]とat()の違いもこのスレでやるの?
そうなってくると分ける意味ないんじゃない?
やっぱり一般人に手を出すのに二の足を踏んでいるライブラリのスレだと思う。
つーわけで、やっぱり Boost を語れゴラァでいいんじゃね? って、しばらく BOOTS を使うのも可だけどな。
異論はあるでしょうけれど,1000が差し迫っているので とりあえず新スレを「Boostを語れゴラァ part2」で立て直してきます.
ええええ
getBoost()
おちんちん↓
1000 :
デフォルトの名無しさん :2006/02/07(火) 23:18:15
私、女です。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。