Boost総合スレ part10
http://www.boost.org/ 1.51.0が出てるのにさっさと次スレ立てろカス とりあえずsandboxスレ使ってからにしようと思ってたけどたったか BoostはC++11の登場によって必要性が薄れたとは言え 時期バージョンのネタを提供する場として生き残るだろう 特にC++11の新機能を使った物が書かれると予想 betterCだと思っていた時期がわたしにもありました 以下のコードがgcc4.6.1でコンパイルエラーになるのですが、原因わかる方います? 当然ながらtestをmainの外に出せば問題ありません。 あと、VC8でも正常にコンパイルできています。 12 int main () {↲ 13 class test {↲ 14 public:↲ 15 void func() {↲ 16 printf("aaaa\n");↲ 17 }↲ 18 };↲ 19 ↲ 20 test t;↲ 21 boost::thread th(&test::func, &t);↲ 22 th.join();↲ 23 return 0;↲ 24 }↲ VCの独自拡張なのか…? ttp://d.hatena.ne.jp/erio_nk/20090817/1250505464 ローカルクラスをテンプレート引数にするのはC++11から なぜ関数内クラスはダメで関数内関数はアリなんだろう boostくらいインストールなしで最初から使えるようにしてくれよ 何GBもいらないもんインストールするくせに 肝心なもんは入れてくれないんだよな boost の iostreams を使って 簡単なフィルターを作って遊んでるんですが、 filtering_ostream の最後にfile_sinkにして、そのファイルのパーミッションを変更して、書き込み不可にしたときに 1)try catchでくくっても例外が発生しない。 2)その filtering_ostream のオブジェクトの fail() メソッドでチェックしてもtrueになってない。 ということで、エラー無視して動作してる状態になってます。 書き込み不可とかでエラーの検出ってどうやるんでしょうか? >>23 自己レスですが、ソースとネットを確認したら file_sink の is_open() で確認できるみたい。 filtering_ostream の fail() では確認できないみたい。 そういう仕様なのか? 良くわからない。 Mac OS X 10.7.5でBoost 1.51のfilesystemを使おうとすると正常に動作しなかった。 file_size("file_name")でも実行時にエラーになる。 コンパイラーがXcode 4.5.1ではデフォでLLVM Compiler 4.1になっているが、これをGCC4.2にすると正常に動作。 他に同じ症状の人いる? >>20 あくまで非公式なんだからビルトインはおかしい 2ch 自体が活発じゃない既にオワコン 活発な気がするスレはあるけど あっちは自演で成り立ってるだけだから boost::iostreams::copyって、バイナリファイルは扱えないの? boost::iostreams::filtering_istream is; is.push(boost::iostreams::file_source("src",std::ios::binary)); boost::iostreams::filtering_ostream os; os.push(boost::iostreams::file_sink("dst",std::ios::binary)); boost::iostreams::copy(is,os); ってやったとき、srcの中身がテキストファイルならちゃんとdstに出力されるんだけど、 srcがバイナリファイルの場合は出力されてないんだ。 Mac初心者なんだが iPhoneで動かすためにBoostをmacportsでインストールしたんだが lipo -info で見るかぎり、x86_64 しか出来てない どうすればboostできるの? OSはSnowLeopard >>31 自己解決した。 どうもfile_sourceとfile_sinkのファイルパスに全角文字が混ざるとダメみたい。 1.52.0で確認。 てかこんな制限知らなかったよ… すいません、C++そのものがほとんど初心者なのですが、 どうしてもコンパイルエラーが取れないので質問させてください・・・ #include <boost/thread.hpp> すると、duration.hppの static BOOST_CHRONO_LIB_CONSTEXPR float lowest() BOOST_CHRONO_LIB_NOEXCEPT_OR_THROW { return -(std::numeric_limits<float>::max) (); } で『Constexpr function never produces a constant expression』というエラーが発生します。 調べて、maxがうまいこといってないんだろうと推測したのですが、Macでの対処法がわかりません・・・ どうかよろしくお願いします。 boostのバージョンとコンパイラとそのバージョンくらい書けよ constexprがらみみたいだからいっそ11でなく03でコンパイルしたら ああこれかttps://svn.boost.org/trac/boost/ticket/7479 boost1.52.0にあげろ zlib、gzipは操作できたんだけど PKzipを操作する方法ない? asioってiPhoneでも動く? thread、signal、filesystem等の OS依存部分に関して制限とか知ってたら教えてほしい。 MinGw上のg++ 4.6.2でBoost 1.51のSpiritのQiのヘッダのプリコンパイルができない コンパイルに時間のかかるライブラリなのでプリコンパイルしたかったのに 言われてみればそうかも でもMplのサンプルプログラムはヘッダをプリコンパイルしても動いてるみたいだしどうなんだろう テキスト解釈する分は省けるから全くの無駄ってわけじゃないけど、 qi のコンパイル時間にはほとんど寄与しないだろうね。 parser 部分だけ分けてコンパイルできるようにすればどう? 何千回も同じヘッダをインクルードしてはインクルードガード処理しているようなら 1つにまとめた方が速いと思う。 Spiritのチュートリアルを参考にMyDefragのスクリプトファイルのパーサーを作ろうとしたが コンパイル最中にBoost.Variant関連でヒープ領域が食いつくされてしまう 自分のコードの再帰関連で変なところがあるんだろうなw VS2012のツールセットのv110_xpでビルドするにはどういうコマンドラインになるの? v110とv110_xpの二種類あって、バージョンだけ指定したらv110になるよね VC2010でBoost preprocessorのBOOST_PP_FORがうまく動かないんだよね。 2日くらいいろいろ調べてみたがよく判らなかった。 http://d.hatena.ne.jp/DigitalGhost/20091212/1260594965 ここのを参考に(かなりそのままに)使ってるんだが、これもうまく通らなくなってる。 自動展開で256を超えた場合に問題があって以前パッチで修正してるらしいんだが まだ問題ありそうなんかなぁ。 ここの中の人に聞いた方が早いか? Boostと相性の良いガーベジコレクターライブラリって何になりますか? Version 1.53.0 February 4th, 2013 18:29 GMT Lock-Freeっていうのが新しく入ったみたいだけど、Interprocessと組み合わせた場合の制限(↓)ってもう少し詳しい説明はどこかにないのかな、今の段階の回避方法とか ttp://www.boost.org/doc/libs/1_53_0/doc/html/lockfree/rationale.html#lockfree.rationale.interprocess_support variant<int,int>が自動でintにならない? 日本の企業はBoostライブラリ程度のものはすでに自前で作っているから 企業ではboostはほとんど使われないよな お前ら趣味でプログラム? progress_displayが使えるのはboostだけ! mplでprintf dbugみたいなことって出来ないの? boost::thread::idでスレッドIDを指定してスレッドがまだ存在しているかどうか 確認する方法ってありますか? >>61 ないから作った github.com/niitsuma/variant_shrink >>68 大事な事なのでもう一度 日本の企業も腐るほどあるわけで このスレも含めてだけど、2chは瀕死の状態だね。どのスレも進まない。 >>68 使っている企業が多いなら、このスレ、もっと進行するだろう LANとトランスポート層を意識的に混同してるのか? ファイアウォールもない会社なんか先行き知れてるぞ >>73 >2chのプログラム板に来る奴が居る企業とかやだわ 73は企業の人じゃないとするとニート? 2chに書き込みなんかしてる >>73 とか嫌だわ。その嫌な奴が嫌と言ってる事って...? (クレタ人は嘘つきだ...) >>78 学生じゃないか 社会人なのにどぶ板の2chに入り浸っている奴ってへんな奴が多いだろうし ちなみにBoostについて日本語で情報交換できる場所って他だと何処にあるの? まぢ日本語は諦めてブックマークに boost/G URL:google.com/webhp?hl=ja&q=site:boost.org+%22 weblio/G URL:google.com/webhp?hl=ja&q=site:weblio.jp+%22 でも入れといた方が楽ですぜ googleって情報交換できるの? 始めて聞いた ひょっとして思考盗聴とかのたぐい? iphoneから2chへのアクセスが禁止になると同時に http://togetter.com/li/464104#c990983 あちこちに「2chは底辺」とか「2chは終わり」 >>70 みたいなのが増殖するというのは分かりやすすぎなのではないのですか? もうちょっとこう工夫するとか出来ないのでしょうか? 単なる時間的な前後関係を因果関係と思っちゃうタイプか >>86 うん ピットクルーの自給800円バイトの割には頑張ってると思うよ >>84 WEBに公開するとgoogleの検索にひっかかるんだぜ。 2chとgoogleがありゃ大抵は情報交換可能。 ここの皆さんがいるじゃあないですか ンヒッ (キチガイスマイル) boostは便利な昨日が多いけど、 マニュアルが読み辛いんだよな。 ファイルをインクルードして、 その中で自作のdefineで定義されたマクロが呼ばれた回数わかりませんかね? やったことないけど Boost.Wave のトレース機能使ってみるとか。 純粋にはできなかったけど、 マクロ呼びたしをリスト化して解決しました all( func(123) func(456) func(789) ) のように BOOST_PPではSEQ型って呼ばれてる型で渡せるように boostの質問もスタックオーバーフローにしたほうが いい返事がくる気がする 人が多いうえにネイティブで英文の一次資料を楽に読める人だらけ、 質問と回答が基本で雑談・荒しが本筋に乗らない、レーティングとコメントで有益な情報を判別できる、 といったあたりはましだろうけどな それでも回答のつかない質問・ずれた回答・間違った回答は人が多い分やっぱり多い なんでboostPro使って外部参照が未解決になるんだ… boostProでだめなら自前でビルドすればいいじゃない boost::iostreamsで、入力サイズと出力サイズが異なるinput_filterってどうやって作るの? zlibのフィルタとかソース見たけどわからなかった… フィルターに状態フラグを持たせて状態に応じて振る舞いを変える程度だと思うけど? https://github.com/bitcoin/bitcoin ビットコインの実装がBoost使いまくってて もういっそasioの一部になってしまえ な感じになってる 自己解決。 入力サイズと出力サイズが違うからおかしくなってたんじゃなくて、 入力データをバッファに入れるだけで次のやつに渡さない状態の時に0を返してたのがダメだった。 0返すとそこで終了しちゃう。 あと、zlibフィルタ、入力サイズと出力サイズ同じだった… Boostのスレッド関連の機能使ってるライブラリと OpenMP 一緒に使ったら うまいこと排他制御して動いてしまったりするもの? 圏論は難しいというから調べてみたら boost.MPL と同じ事だった ここまで的を得ない質問をするとは ひょっとしておぬし馬鹿だな >>110 thread lexical_cast あたりは毎日使うな 話すこと無いからな 質問が多そうなBoost初心者は専スレでなく一般のC++スレのほうで質問するだろうし Linuxの386サポート打ち切りなんて話があったが、boostでも386のサポートがなくなるな boostの新しいの出たけど、winのコンパイル済みのものを配布なんてしているところなおのか? 自分でコンパイルなんてハードル高すぎ 俺はもうcppを自分のプロジェクトに入れちゃってるわ こないだ追加されたTypeErasureってどうなの? 試した人いる? ようするにany,variantの超強化型なんで強力だぞ そのぶん複雑なことをやろうとすると下準備のややこしさと面倒くささが増すが geometryの実装の凄さはわかるんだが、使いこなせてるやついる? C++11が出てからboostはニッチツールになって来たな まあ面白いからこのまま続けてくれ いや、今度はC++14の機能が使えるんだから重宝するでしょ 老兵 強い 諸葛亮が扱わないと猪突猛進してコロッと死ぬ boostはソースコード見て勉強するためのもの 実際には使わんよ optionalとかserializeとかlexical_castとか使えないと不便だ optional<T&>って気になってたんだけど、optional_ref<T>として 使えるようにするかもしれない、みたいな話は結局どうなったんだろ? これをやるには先ずこれを済ませとかないと……でもこれはこれとこれとこれが済んでないと…… えーとつまり発端は……なんて連鎖を取り扱うライブラリありますか? Makeみたいな >>137 Systemdみたいに並列にやりたいのでは >>136 state machineやcontextで出来ないかな? 管理者権限のPCでも 自分のホームディレクトリの下にLinuxのパッケージシステム作るのあったよね apt-getとかemerge とかが動くやつ あれだと自動で依存関係を解決してくれるね >>143 >管理者権限のないPCでも >自分のホームディレクトリの下にLinuxのパッケージシステム作る これの名前忘れてしまって検索しようがないのだけど 誰か知りませんか? cygwin msys mingw bow colinux andlinux boost::iostreamsの自作フィルタとか需要あるのかね。 最近、githubに以降したんだけれど、 今のところ公式から落としてくるのには、 各リポジトリのすべてをクローンしなきゃいけないの? ライブラリ単位でリポジトリが分散したせいでやりづらくなっているんだが >>148 https://svn.boost.org/trac/boost/wiki/TryModBoost#InstallingModularBoost > git clone --recursive git@github.com:boostorg/boost.git modular-boost >clone.log > ... 先生! 大変です。size_t が居なくなりました。 gcc を 4.5 -> 4.8 にアップグレードしたところ、size_t が脱走しました。 いや、boost のインストール時なのかもしらん。 オーソドックスな対策と その原因に関する解説ページを教えていただけませんでしょうか? 現在必要なソースのヘッダごとに #ifndef _SIZE_T #define _SIZE_T typedef __SIZE_TYPE__ size_t; #endif と対策していますが、どー考えても対策としてはタコです。 boost/pending/cstddef.hpp も怪しいが、単純なgccの問題かもとも思っています。 宜しくお願いいたします。 >>152 ありがとうございます。 どこに定義すればよいのでしょうか? また、この原因はboostでしょうか? >>150 thx SSHがめんどいのでHTTPSで落としたよ 【Boostのここがスゴい1】 ほとんどのライブラリがリンクなしで(#includeするだけで)使える。※但しインスコが必要 【Boostのここがスゴい2】 C++11以前の古いコンパイラでもboost::shared_ptrなどのスマートポインタが使える。 【Boostのここがスゴい3】 Boost.multiprecisionで手軽に多倍長演算(非常に桁数の大きい演算)ができる。 【Boostのここがスゴい4】 古いコンパイラでもマルチプラットフォームでマルチスレッド対応が可能。 【Boostのここがヒドい1】 バイナリがでかくなる 【Boostのここがヒドい2】 コンパイルエラーがいみふ awkは、2^200を計算できないのですが、 bcコマンドは出来ます Pythonは、2の1万乗、つまり3千桁も計算できる Rubyは、2の千乗、つまり300桁も計算できる 【Boostのここがヒドい3】 boostインストールしたらboostフォルダだけで2GB超える Boostつかうと一気に実行ファイルサイズが10倍に?! >>165 色んなオプションでコンパイルできるから…全パターンのコンパイルしたら結構でかいんじゃね? 流石に試したことはないけど… >>163 自分で使う気が無くても このライブラリをつかうにはboostを使ってね♪ってのがあるだろ boost感染と呼ぶべきか >>168 それを言うならboost汚染ではあるまいか… >>163 車輪の再発明を避けることを徹底すると必要なライブラリがどんどん膨らんでいくよ 便利そうだからと安易にライブラリに追加してると、便利そうだからと安易に利用することになって 依存関係が発生してしまう そんなことは必要なライブラリが膨らんでから考える いちいちzlibなりboost::serializeなり自作してられっか >>174 >>173 はboost自体の話。 いちいち必要なライブラリだけビルドするのは面倒だし、依存関係で枝葉のライブラリしか 削れないなら全部ビルドした方がましって感じ。 exeだとDLL版でもいいんだけど、プラグインdllだとexeと同じパスに置かれないことも多いし 32/64bitの区別の問題とかもあって暗黙的なDLLロードに期待できないんだよね。 だからboostのバイナリをDLして使うより手間がかかるからboost自体を巨大化されるのは困る。 ttps://sites.google.com/site/boostjp/tips/build_link 依存がどうしたって? VC11だと、bootstrappingが必要か。。。 時間がかかりそうだな。。。 数年ぶりに戻って来たんだけど、今はLets Boostみたいな日本語で解説してるサイトは無いの? 付属のdocだと情報量が多すぎて疲れる・・・ 頑張って英語読もう コードもついてるしそんな難しくないだろう boostなくても標準C++で間に合うようになって来てる 逆にまだboostじゃないとダメな機能ってどんなのがあるんだろう? property_treeとかserializeとか boost使い始めたのはgregorianのためだったっけな一番最初は その後scoped_arrayとかも使い始めた 怒らずにマジレスしてほしいんだけど progress_display に代わるものってあるの? Version 1.56.0 August 7th, 2014 16:08 GMT Boost初心者です。 http://qiita.com/softgate/items/75f123f01ccdee6d36d0 を参考に boost 1_56_0 を以下のようにビルドしたのですが b2 toolset=msvc threading=multi variant=debug,release link=static runtime-link=static address-model=32 --stagedir=stage/x86 -j 8 b2 toolset=msvc threading=multi variant=debug,release link=shared runtime-link=shared address-model=32 --stagedir=stage/x86 -j 8 b2 toolset=msvc threading=multi variant=debug,release link=static runtime-link=static address-model=64 --stagedir=stage/x64 -j 8 b2 toolset=msvc threading=multi variant=debug,release link=shared runtime-link=shared address-model=64 --stagedir=stage/x64 -j 8 このBoostを使ったVS2013プロジェクトで error LNK1104: ファイル 'libboost_thread-vc120-mt-1_56.lib' を開くことができません。 が出て解消できません。thread関係は、以下のファイルがあります。 stage\x86\lib\libboost_thread-vc120-mt-s-1_56.lib stage\x86\lib\libboost_thread-vc120-mt-sgd-1_56.lib stage\x64\lib\libboost_thread-vc120-mt-s-1_56.lib stage\x64\lib\libboost_thread-vc120-mt-sgd-1_56.lib エラーメッセージで指摘されているファイル libboost_thread-vc120-mt-1_56.lib もビルドするには、どうすればよいでしょうか? あてずっぽだけどmt-sってlink=staticなb2の生成物だと思うから link=sharedのときの生成物をよく探せばいいんでないの link=static runtime-link=shared がないからじゃね >>190 ,191 レス有難うございました。 その通りでした。 link=static runtime-link=static link=shared runtime-link=shared 以外に、 link=static runtime-link=shared link=shared runtime-link=static もビルドしたら解決しました。 copy して rename だけで良かったんじゃないかという気はする それじゃだめなんよ libcとdll混在でえらいことなる コンパイラオプションでstatic版、dll版どっちリンクするか決定してるから ええっと、WindowsのDLLの仕様上、 link=sharedとruntime-link=staticの組み合わせは基本マズイはず。 .exe側と .dllが 別々に __FILE__ 構造体を保持したりして、 それを狙っている場合はいいが知らずにstatic変数のポインタを やり取りするとクラッシュすると聞いた。 その逆も同様だと思った。 テンプレの関連書籍買おうと思うんだけど 内容はどんな感じなの? Boostのホームページに書いてる以上のこと書いてる? あとテンプレ貼られてから2年経つけど2年の間に新しく関連書籍出た? >>195 一番まずいのはHeap破壊 libcのmallocで確保したポインタをmsvcrt.dllのfree呼び出す、あるいはその逆するとHeapがおかしくなる >>195 ,197 憶測で語るのはそこまで。不具合が実在するなら公式tracにバグ報告して貢献したほうがいい。 >>199 確かに >>197 のHeap破壊の件はboostと関係ないね。失礼。 exe側の標準ライブラリリンク方法を変えて対処すべきことを、側聞だけで基本マズいとか断言する >>195 みたいなの困るわ。 いや、exe側のリンク方法を変えてもポインタを渡したらアウト、対処できない。 exeの作成者側が仕様を理解していれば、それで動作させることも可能だが、 一般的にそんな用途はない。 ライブラリのバージョンの特殊なテストとか普通にはない状況。 ついでに 逆にlink=staticとruntime-link=sharedの場合だと、 利用者が常に一つの.exeを作る場合には良いが 利用者も.dllを書いて、そちら側からもboostを利用する場合、 同様の問題が発生するので× そうすると一般用途にビルドを行う場合 link=static runtime=static link=shared runtime=shared この2つのパターンだけ用意すれば良いと思われる (´-`).oO (なんでboostとC標準のリンクオプションがわざわざ別々になってると思う?) 正直link=とruntime-link=のそれぞれの意味がわかってないけど、 とりあえずlink=staticのしか使ったことない。 runtime-linkのほうはMSVCのコード生成設定に合わせるけど。 Express版の2010だとEula.txtが付属してないので、 /MDだと著作権的にグレーになってしまう。 /MTでコンパイルしないと公開できないw ていうかMSVCで普通にプロジェクト作って普通にインクルード&ビルドしたら link=staticで作成されたファイル名のほうしか読みにいかなくない? マルチスレッドDLLでもマルチスレッドでもdebugでもreleaseでも。 208はexeを作ったときの話。dllについては知らない。 BOOST_ALL_DYN_LINKを定義しないと, libboost_の方にリンクする。 定義するとboost_の方へリンクしてDLLを使用するようになる。 >>210 ありがとうございます。 BOOST_ALL_DYN_LINKなるキーワードがあったのですね。 #pragma comment(linker, "/NODEFAULTLIB:libboost_〜.lib") ってやって必要なcppだけ本体と一緒にコンパイルリンクするのが一番楽 Boost spirit qiの、grammarに設定するinherited attributeについて どうしても分からない点があるので、質問します。 * ソースコードとエラーメッセージ全文 * http://pastebin.com/FaNQKEh1 コンパイラはVS2013 Pro Update3 の cl.exe (バージョン18.00.30723) boostのパッケージはバージョン1.55(7zip版)です。 inherited attributeとして自作の構造体を使用したいと思い qi::grammarのSignatureの引数部に自作の構造体を設定したところ 「その構造体にresultの定義がない」というエラーメッセージが起きコンパイルが失敗しました。 構造体の代わりにstd::string(resultというメンバは持っていないはず)を使用すると 問題なくコンパイルが通るので、inherited attributeに設定できる型に何か制約があるようにも思えるのですが boost.orgのドキュメントからはそれらしき記述が見つけられず、エラーメッセージを見ても私にはわかりませんでした。 海外含めて関連する情報がないか探したのですが(boost spirit qi inherited attribute requirement 等で検索) 解決策を見つけられませんでした。 inherited attributeに使用できる型の制約条件や、類似のコンパイルエラーとその対処方法をご存じであれば 教えていただきたく思います。 VS2013のC++でBoost1.56を使っているのですが、どんなプロジェクトを作ってもビルドすると コンパイルされたクラスの テンプレート のインスタンス化 'std::streamsize boost::iostreams::detail::copy_operation<Source,Sink>::operator ()(void)' の参照を確認してください みたいか警告がいつも数十行出るんですが、「参照の確認」とは何をどうすれば良いのでしょうか? >>214 エラー以前になんかInherited attributesの使い方と使いどころを基本から間違っていないか? ここの例を見る限り ttp://www.boost.org/doc/libs/1_56_0/libs/spirit/doc/html/spirit/qi/tutorials/mini_xml___asts_.html 正規表現での後方参照みたいに一つのルール内でサブルールにマッチした結果によって 挙動を変えるルールを記述するときに使うものじゃないか? >>216 レスありがとうございます。 なるほど、想定されている使い方はこういったケースなのでしょうか。 だとしたらそもそも今回の私がやろうとしていたことには不適切だったかもしれませんね。 (パースするごとに、inherited attributeに設定したインスタンスに情報を反映させたかった) 余計なことは考えず、普通に対応するようにします。 コードについてですが、この例を参考にしてすこし試したところ 要するにboost::phoenixなオブジェクトであれば渡せるようで grammarのoperator()に渡す引数をphoenix::val(...)やref(...)で包めば コンパイルが通ることがわかりました。まだ動作確認はしていませんが・・・ ともあれ、ありがとうございました。 >>214 ,217 いまさらだがわかった範囲で言っておくと Inherited attributes に対する条件には ttp://www.boost.org/doc/libs/1_56_0/libs/spirit/doc/html/spirit/qi/reference/basics.html の > Some parsers (e.g. primitives and non-terminals) may take in additional attributes. Such parsers take the form: > p(a1, a2,..., aN) > where p is a parser. Each of the arguments (a1 ... aN) can either be an immediate value, or a function, f, with signature: > T f(Unused, Context) > where T, the function's return value, is compatible with the argument type expected and Context is the parser's Context type > (The first argument is unused to make the Context the second argument. This is done for uniformity with Semantic Actions). があって その immediate value の判定は boost::is_scalar か boost::spirit::traits::is_string のどちらかが真であるかで判定されてる。 けれど MyStruct はそのどちらにも該当しないので immediate value ではなくもちろん関数でもないから条件を満たさずエラーになる >>217 でやったように phoenix の val, ref でラップすれば function, f のほうで条件を満たすことができるのでエラーにはならない ということだと思う >>218 詳しく調べていただきありがとうございます。 「immediate value」判定を行っている個所を確認して、std::stringが通った理由も納得できました。 というか、かなり制限がきつかったんですね・・・そりゃ通らないわけだ。 property tree使ったら、XMLの入出力は楽勝や! 当然っちゃ当然なんだけど boost::functionとstd::functionって実装違うんだね・・・ boost::lambdaで作ったファンクタが、前者だと格納できて 後者だと格納できずにコンパイルエラーになるケースに遭遇したよ その違いはコンパイラの違いや、そのC++STLが対応するバージョンにもよるな VC++2013のstd::unordered_mapのキーに素直にtuple指定できないからboost::unordered_map使ったりしてる いずれ指定できるようになったらstdに戻す boost::unordered_mapのキーに生ポインタ入れるのはさすがにマズイよね? valueにshared_ptr、keyにはその生ポインタっていうのは良く使ってるなぁ あ、特に問題はないのか。 何となくだけど、「生ポインタ入れたらヤバそう」って思い込んでたよ… 生ポの開放時にキーも削除又は解放後は使用されないのなら特に問題無さそう smart pointerのdeleterでキー削除すればいいと思うよ http://boost.cppll.jp/ の文字化け問題っていつ治るの? 毎回EUCに切り替えるのめんどくせーんだけど 文字化けなおしたのが、githubにコピーされてるよ。 ttp://www.freeml.com/cppll/14009 ttp://boostjp.github.io/archive/boost_docs.html Windows8でVisual studio 2012にBoost1.57.0をビルドしようとしているのですが、失敗して困っています。 ネット上にあるboostのインストールのやり方を参考に、 bootstrap b2 toolset=msvc-11.0 --build-type=complete stage とビルドしたのですが、 ...failed updating 411 target... ...skipped 556 targets... ...updated 4241 targets... と出ます。エラーメッセージが大量に出るのですが、一部を見ると、 一番最初に link.jam no such file or directory というエラー出たり、 call "C:\Program Files (x86)\microsoft visual studio 11.0\vc\vcvarsall.bat x86>nul や ...failed msvc.archive bin.v2\libs\wave\build\msvc-11.0\release\link-static\runtime-link-static\threading-multi\libboost_wave-vc110-mt-s-1_57.lib ...skipped <pstage\lib> libboost_wave-vc110-mt-s-1_57.lib for lack of <pbin.v2\libs\wave\build\msvc-11.0\release\link-static\runtime-link-static\threading-multi> libboost_wave-vc-110-mt-s-1_57.lib のように出ています。 ↓続く sage忘れすみません 実はこのエラーに対面する前、bootstrapを実行するときに 'cl'は内部コマンドまたは外部コマンド操作可能なプログラムまたはバッチファイルとして認識されていません というエラーが出まして、それを解決するために http://blog.remu.biz/2011/04/vs2010boost.html このサイトを参考にC:\Program Files(x86)\Microsoft Visual Studio 11.0\VC\bin\vcvars32.batに @SET VSINSTALLDIR=C:\Program Files (x86)\Microsoft Visual Studio 11.0 @SET VCINSTALLDIR=C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC @SET FrameworkDir32=C:\Windows\Microsoft.NET\Framework @SET FrameworkVersion32=v4.0.30319 @SET Framework35Version=v3.5 の追加と ::@call :GetVSCommonToolsDir ::@if "%VS110COMNTOOLS%"=="" goto error_no_VS110COMNTOOLSDIR ::@call "%VS110COMNTOOLS%VCVarsQueryRegistry.bat" 32bit No64bit のコメントアウトの編集をしました。 もしかしたらそれが原因なのでしょうか?しかし元に戻してビルドを行ってみたのですがやはりビルドはできませんでした。 3日ほど悩んで答えが出なかったので皆さんの力を借りさせてください。お願いします。 >>235 です。 すみません。初心者なものでjamというものが何を指しているのかわかりません。 bjam.exeならbootstrapの時にb2.exeと一緒に生成されています。 ぐぐるとboost-jamというものも見つかったのですが、これは古いバージョンのインストールに使うもの?のようでした。 >>236 スタートメニューにあるVS2012 x86 Native Tools コマンド プロンプトから b2を呼んでるか? >>239 VS2012開発者コマンドプロンプトから呼んでました。 改めてVS2012 x86 Native Tools コマンド プロンプトでビルドしてみたのですが、failed updatingと言われ、ビルドできませんでした。 >>235 です。 どこでエラーメッセージが区切られているのかわからなかったため、読み飛ばしてしまってました。これが全文のはずです。 if exist "bin.v2\libs\random\build\msvc-11.0\release\link-static\runtime-link-static\threading-multi\libboost_random-vc110-mt-s-1_57.lib" DEL "bin.v2\libs\random\build\msvc-11.0\release\link-static\runtime-link-static\threading-multi\libboost_random-vc110-mt-s-1_57.lib" C:\Users\ユーザー名\AppData\Local\Temp\b2_msvc_11.0_vcvarsall_x86.cmd link /lib /NOLOGO /out:"bin.v2\libs\random\build\msvc-11.0\release\link-static\runtime-link-static\threading-multi\libboost_random-vc110-mt-s-1_57.lib" @"bin.v2\libs\random\build\msvc-11.0\release\link-static\runtime-link-static\threading-multi\libboost_random-vc110-mt-s-1_57.lib.rsp" ...failed msvc.archive bin.v2\libs\random\build\msvc-11.0\release\link-static\runtime-link-static\threading-multi\libboost_random-vc110-mt-s-1_57.lib ...skipped <pstage\lib> libboost_random-vc110-mt-s-1_57.lib for lack of <pbin.v2\libs\random\build\msvc-11.0\release\link-static\runtime-link-static\threading-multi> libboost_random-vc-110-mt-s-1_57.lib DEL "bin.v2\libs\random\build\msvc-11.0\release\link-static\runtime-link-static\threading-multi\libboost_random-vc110-mt-s-1_57.lib"は確かにありました。 しかし、生成された日時を見るとこれはb2を実行した時に生成されたもののようです。 これはどうすればいいのでしょうか? Visual Studioでboostを使う自作の Static.lib プロジェクト を作って、そのライブラリを使う自作の Console.exe プロジェクト でリンクして使う場合、Console.exeのプロジェクトの設定で リンカー 追加のライブラリディレクトリ: C:\.....\stage\Win32\lib とすればリンク出来て無事に実行できました。 このリンカーの設定は、Static.libを使うプロジェクトを作ると(今の場合Console.exe)、必ずしておく必要がありますか? できればStatic.lib側のほうの設定でboostのリンクもできるなら、Console.exe側でやる手間が省けるのですが。 boostのGILって標準ではBMPファイル読み込めないの? ぐぐって出て来たnew ioってのはまだboost申請中?みたいだけど、これ使っておけばいいのかな? io_newでBMP読めたけど、色深度が読込むファイルと合ってないと例外発生するよ >>244 結構面倒くさい仕様だな… 勝手にフォーマット変更とかしてくれると便利だけどさすがに贅沢か… boost.computeって正式に採用される予定あるの? boost.pythonってstatic linkしてもpythonxx.dllは必要?教えてエロいひと。 Win7 64bitで python3.4 32bit版インストール link=static runtime-link=static address-model=32でboost.pythonビルド includeパスとlibパスを指定して、MTにして #define BOOST_PYTHON_STATIC_LIB #include <boost/python.hpp> で32bitアプリケーションをビルド pythonインストールしてないPCだと、python34.dll missingになる うーん。何か足りないものありますか? boostの名前をつけるルールを 行列計算の時だけ破って 行列を大文字のAとかXにしてるの良くみるのですが 行列だけは例外的にルール破っていいことになってるのでしょうか 大文字はテンプレート変数ですよね? boostってちょっとはC++ができる人が作ってるライブラリですよね? ビルド時になんであんなに警告がでるんですか? もしかして素人さん? コンパイル時間はどうでもいいです。 コンパイルなんて休憩時間くらいしかやらないから・・・ コンパイル時間のことでないとすると どのライブラリが何と比べてどれくらい遅いのかを書かないと 一時は随分持て囃されたようだが コレもすっかりネタライブラリと化したなw ネタかどうかはともかく、PCのアプリ開発がビジネス的においしくないから 国内ではもっぱらプログラム廃人(w)の道具でしかない コンパイルがだるいのであまり使いたくないが、シリアライゼーションとファイルシステムは使いたいんだよな Lapackもっと気持ちよく使えるようにして欲しいなあ boost::geometryって2Dは充実してきてるけど、3Dへの拡張は現状どんな感じですか? 2010年くらいに将来やる予定って開発者が言ってた気がするけど フォーラム見たら3Dへの拡張は全体的にまだまだって感じですね せっかくトレイト使ってジェネリックにやってるんだから早く実装して欲しい・・・ read_iniでファイルを読み込んだ時 セクションが1つも設定されていない場合にエラーを出力したいのですが セクションだけを取得する方法はありますか? 漠然とした質問ですみません。 boostのバージョンは1.54です >>290 ID変わりました。>>289 です。 ご回答ありがとうございます ファイルの中身が、str=100だけなど セクション名が無く、キーとキー値しかない場合 にもエラーを出力したかったので感謝です。 また質問ですみません。 iniファイルにセクション名のみ書かれている場合にエラーを出力したいのですが >>290 の方法でやってもセクション名を取得出来ませんでした。read_iniで確認するには どうすればいいでしょうか? >>292 boost/property_tree/ini_parser.hppの105行目と141行目で 読みだしたセクションにキーがないときはそのセクションの情報を捨ててる だから、セクション名だけのiniファイルを読み込ませたときは 空のiniファイルを読み込ませたのと同じ状態になるみたい 見たのは1.61だけど、1.54も多分同じ >>294 ちゃんと次期標準としての役割は果たしてて、 次のC++ではfilesystemやoptionalが取り込まれるよ バージョンアップがちょくちょくあるから、仕事ではちょっと使いづらいところもあるのかも ですよね。thread関連はメンテだけになるかもしれませんが。 UTF-16デフォルトなWindowsだと使いにくくてなぁ そうなんですか? 未だにSJISだと思ってましたw SJISでしか動かないのは、batのバッチプログラムぐらい。 ファイルにSJISに含まれない文字を含むファイル名をつけて、batで呼び出せるかどうか試してみればいい。 Win2000/XP に移行した時に Unicode ベースのシステムになった でもレガシーなAPIを大事にお守りするせいでなかなか SJISが死なない Windows10 と心中することになりそうだな NT系は最初の3.1からUnicodeなんだが 5.0の時にUCS-2からUTF-16になったくらいで VCのコンパイルオプションにBOM無しUTF-8読み込みの許可を加えるまでは糞 BOMつければ済むC/C++コンパイラよりUTF-8を一切受け付けないリソースコンパイラの方を先になんとかしてくれ Pragma Directives https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa381031 (v=vs.85).aspx This pragma is not supported in an included resource file (.rc). Therefore, example: #include "English.rc" #pragma code_page(932) #include "Japanese.rc" >>306-307 それ使ってもBOM入れるとエラーとかC/C++ソースと逆の状態で地獄の様相を呈してるぞ おまけにリソースエディタで編集すると問答無用でCP932で上書きされるという なんでboost.guiがないの? チャラくなっちゃうから? どのgui環境に対するtoolkitを要求してるの? beginとかendとか書くの面倒だな〜と思ってboost.range.algorithmsを調べてると 途中から|=とかadaptorsとか出てくるのですが これは同じライブラリの話なのでしょうか? もしくは全く別の二つのライブラリなのでしょうか? >>311 どちらもBoostライブラリの一部 さらに、どちらもBoost.Rangeライブラリの一部 ヘッダファイルは別 boost/range/algorithm.hpp boost/range/adaptors.hpp お互いに独立しているから、別々に使っても問題ない Eigenでもublasでも動く行列計算プログラムをテンプレート使えば出来ないかな size1,size2とcolums,rowsが互換ないので挫折してるんだけど すんごい初歩的な質問で申し訳ないんだけど、 boost::serializeを使用するとき、register_typeを行う責任は誰にあるんだろう。 保存したいオブジェクトツリーをすべて内包するenvironmentクラスで一括して すべてのクラスのregister_typeを行うべきなのか、それともその中の個別オブジェクト単位で 自身及びその子が使用する可能性のあるクラスのみを扱うべきなのか。 たとえば、 environmentクラスの中にdomain1とdomain2のサブオブジェクトツリーがあり、 シリアライズ順もdomain1->domain2とした場合、 domain2内でのみ使用していたクラスをdomain1でも使うように拡張することになって、 そちらでもregister_typeを行うことになると、オブジェクトidの対応が崩れちゃうよね このケースではシリアライズのバージョンで対応できる範囲を逸脱しちゃうと思うんだけど。 どうするべきなんだろう。 そういうケースではBOOST_CLASS_EXPORT系のマクロで明示的にクラスとシリアライズ用IDを関連付けするんじゃないか boost liberty の全API をテストするコードってある? ごめん、質問が悪かった。 Boost Library の 全API をテストするテストコードはありますか? 全APIのテストなのか中身は知らないがこのへん関連だろ ttps://github.com/boostorg/regression Allocatorだけ変えればcudaでも動く? deviceという不思議な修飾子をtempleteに入れる方法がわからないが double ar[50]; ublas::matrix au(10,50,ar); みたいなことをeigenだとmapで できるけどublasはどうすればいいの? 1.64で入ったこのバグが1.65でも直ってない https://svn.boost.org/trac10/ticket/12723 adjustments to make test_dll_simple pass とかふざけた理由で必須ヘッダーを勝手に削除するとかなめてんのか死ね boost::spiritで質問させてください http://www.kmonos.net/alang/boost/classes/spirit.html このサンプルコードで四則演算をやっている部分がありますが、resultの型をvector<char>などにして int型の計算結果ではなく+-/*の4つの演算子をresultで取得するにはどのようにすればよいのでしょうか。 出力される演算子の順番は数があっていればよいです。 >>327 どいう出力がほしいのかがよくわかんないんだけど、適当な入出力の例を出してもらえます? >>328 1+2-3/4*5*5*5*5 と入力したら result[0]が'+' result[1]が'-' result[2]が'/' result[3]が'*' result[4]が'*' result[5]が'*' result[6]が'*'といった感じに取得したいです。 resultをvector<int>として result[0]が1 result[1]が2 result[2]が3 result[3]が4 result[4]が5 result[5]が5 result[6]が5 でもいいです。 要は、パースしたときの任意の要素を取得したい、ということです。 >>326 1.65で直ってるようだが 削除された boost/serialization/detail/get_data.hpp をincludeしてるやつが残ってただけの問題ぽい ublasで蜜行列演算にmkl使えるのは知ってるけど、疎行列演算には使える? boost.stacktraceで出力が以下のようになり、行数やファイル名が出力されません。 create a window.0x2C8766FA (dbgeng.dll) で例外がスローされました (app.exe 内): 0xC000001D: Illegal Instruction 0# 0x001E08DA in app 1# 0x001CF856 in app ... 9# 0x001F3C28 in app 10# BaseThreadInitThunk in kernel32 11# RtlInitializeExceptionChain in ntdll 12# RtlInitializeExceptionChain in ntdll ・環境…visual studio 2017 community&Nugetで取得したboost-vc141 ・再現するコード #define BOOST_STACKTRACE_LINK #define BOOST_STACKTRACE_USE_WINDBG #define BOOST_STACKTRACE_USE_ADDR2LINE #include <boost/stacktrace.hpp> #include <iostream> #pragma comment(lib, "libboost_stacktrace_windbg-vc141-mt-gd-x32-1_66.lib") void f() {std::cout << boost::stacktrace::stacktrace();} int main() {f(); return 0;} Nugetで取得したboostは以下のようなフォルダがあり、そのなかにlibboost_stacktrace_**.libがあります。 boost_stacktrace_noop-vc141.1.66.0.0 boost_stacktrace_windbg_cached-vc141.1.66.0.0 boost_stacktrace_windbg-vc141.1.66.0.0 boost_stacktrace_addr2line-vc141.1.66.0.0みたいな名前のフォルダがないため、libboost_stacktrace_addr2line**.libみたいなファイルもありません。それが原因な気がするのですがNugetで取得するのではなくソースからビルドしても変わらない気がします。 なのでboost.stacktraceはmsvcでは行数表示はサポートしていないということではないかと思っているのですが、あってるでしょうか? >335 ありがとうございます。Platforms列を見れば良いことに気づきました。 自分で書こうと思います。 https://github.com/boostorg/filesystem/blob/develop/src/operations.cpp で、 Posix 環境はファイルコピーのバッファが const std::size_t buf_sz = 32768; で、Windows 環境は const std::size_t buf_size=128; の理由をおしえてくれめんす。 WinはAPI呼び出してるだけだからソース読み間違えてるぞ Boostを使って 圧縮ファイルの中の特定のファイルを解凍するというのはできるのでしょうか? socket.cancel()、非同期な関数にしか効かないようなソースコメントやら、web情報見かけるんだけど、socket.recieve()に効くのはなんでやろ? 読み間違えてて使えるようになったとかなんかな。 なお、win10 boost 1.66で試しました。 土日でlinux試してみるつもりだけど処理系依存なのかな。 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方 役に立つかもしれません グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』 80D65 Visual Stadio2019でboost Python使いたいけど コンパイル済みバイナリーが古いのしかないみたい 新しいのどこか知らないですか? 何処かのconfig.hに古いVisual Studioのバージョン番号が直書きしてあるらしく、古いvisual studioのバージョン番号がついたdllが生成される pythonのは使ってないから動くか知らんけどvcpkgには入っとるで >>347 config.hじゃなくて環境変数だったり あるいは`〜`の実行結果だったり VCPKGのBoostは常に新しい。 良い事とは限らないが。 boost-python あきらめて pybind11にしてみたけど python3.7しかインストールしてないのに python3.8のinitがないというエラーで動かない windows糞すぎる 下請けが上の勝手な環境に すごい頑張って合わせないと C++とpythonの連携 動かすだけで1週間ぐらい消える 日本でWindowsユーザー多い理由は そういうことだと理解した 下請けが頑張って合わせるの拒否すればWindows使う人減るのに いろんなアプリが独自にpythonをインストールする。 どのパスのpythonが呼ばれているか調べてみては。 組み込みはLuaにすればそういう難儀なハナシは一切ないけどね スタティックリンクしてビルトインしても300KB切るぐらいだし x86版とx64版でライブラリファイルを作成したいのだけど、msvcのバージョンってどうやって調べられる? boostの導入に関する解説を見ても、それについて触れずにさらっと流されてるから再現出来なくて困る 今使うコンパイラのバージョンが知りたいのかランタイムで知りたいのか? VSのツールからコマンドプロンプト開いて cl て実行する。 >>361 無事にコマンドプロンプトが荒ぶってます。ありがとう >>360 なぜか19.2xxxxxの数字が出てきました Native Tools Command Promptとは別のコマンドプロンプトだったのかな いやMSCのバージョンといえば普通これだと思うが。 _MSC_VERとか_MSC_FULL_VERの値だよ。 wikipediaに書いてあるところの内部バージョンはcl.exeのインストールディレクトリ見れば 〜\VC\Tools\MSVC\14.27.29110\bin\〜 とかになってるのでわかる。 そのコマンドプロンプトでpathって打てば割と前の方に出てくる。 progress_displayはC++20にも入らないみたいですね。 macOSでb2でビルドしたboostをxcodeで使おうとしたところ 大量のリンカエラーが Undefined symbol:std::string::_Rep::_M_destroy(... referenced from: boost::system... in libboost_thread.a(thread.o boostがライブラリにstdlib++を使っているからこうなるらしくlibc++を使わせてビルドすべく https://stackoverflow.com/questions/8486077/how-to-compile-link-boost-with-clang-libc この辺を参考にやってみるも同じリンカエラーが消えず そこで質問なのですが、このリンカエラーはboostがstdlib++を使っていることが原因という見立ては合ってますか? そうであれば、boostをlibc++を使ってビルドするにはどうすればいいですかね? >>368 >boostがライブラリにstdlib++を使っているからこうなるらしく 何を見てこう言ってるのか示してくれればそれを確かめるぐらいの人は出てきやすいかもね。 1.74まではb2を起動する前に環境変数をいじれば色々と細工ができたけど 1.75のb2からそれができなくなった。 boost::posix_time::ptimeのバイナリシリアライズではまった x86_64-w64-mingw32でシリアライズしたものをx86_64-linux-gnuで読みたい examples/libs/serialization/exampleにある portable_binary_iarchiveとportable_binary_oarchiveを使ってもだめ 原因はどうもlongの長さがx86_64-w64-mingw32で4バイトであるのに対して x86_64-linux-gnuで8バイトなのが原因のようだ $ cat hoge.cpp #include <iostream> #include <boost/date_time/posix_time/posix_time.hpp> using namespace std; using namespace boost::posix_time; int main () { ptime t0 (microsec_clock::local_time ()); ptime t1 (second_clock::local_time ()); cout << "t0: " << to_iso_string (t0) << '\n' << "t1: " << to_iso_string (t1) << '\n'; return 0; } $ g++ hoge.cpp $ ./a.out t0: 20210925T182058.919287 t1: 20210925T182058 t0をt1のように秒までの精度で出力したいのですが どうすればできるでしょうか? 半年前のレスは俺のスレではないかww ここは誰もいないインターネッツですか? コロナワクチン3回目のboost接種してから、もう一度来てください とりあえずstring::substrを使うことにしました cout << "t0: " << to_iso_string (t0).substr (0, 15) << '\n'; C++ユーザ減ったなぁ.... std::chronoだと、精度違いを変換できたと思うんやけど、Boostはムリなん? 出力時の精度を指定するんじゃなくて、必要な精度のオブジェクトに変換したら? >>377 レス有難うございます >必要な精度のオブジェクトに変換したら? これを探しています chronoはstdに入ったんですね この書き込みの少なさは今のC++ユーザの数を反映している? >>378 > >必要な精度のオブジェクトに変換したら? > これを探しています duration_cast<>()みたいなんないん? https://cpprefjp.github.io/reference/chrono/duration_cast.html > chronoはstdに入ったんですね C++11やで!w ほなら乗り替えたら? 現代C++に必ずしもBoostが必要ではないのもあるかもしれんが 書き込み少なすぎる気はするね バイデン氏、追加接種受ける ワクチン懐疑派に呼び掛け:AFPBB News https://www.afpbb.com/articles/-/3368139 2021年9月28日 3:23 発信地:ワシントンD.C./米国 [ 米国 北米 ] 【9月28日 AFP】ジョー・バイデン(Joe Biden)米大統領(78)は27日、米製薬大手ファイザー(Pfizer)製新型コロナウイルスワクチンの追加接種(ブースター接種)を受け、まだ接種を受けていない米国民は国に損害を与えていると訴えた。 米保健当局は最近、65歳以上の高齢者や、新型ウイルス感染症の重症化リスクが高い基礎疾患のある成人、感染リスクの高い職業に従事する人について、追加接種を承認していた。 ホワイトハウス(White House)で追加接種を受けたバイデン氏は、「そうは見えないけれど、私は65歳以上だ」と冗談を飛ばした。同氏は1回目と2回目の接種を、いずれも就任前の昨年12月と今年1月に受けていた。 バイデン氏は、米国民の77%が接種を受けたが、接種率は十分ではなく、まだ4分の1近くの人々が接種を拒んでいると指摘。「この特異な少数派が、たくさんの人々、この国のその他の人々に対し、ひどい損害を引き起こしている」と述べ、「正しいことをしてほしい」と訴えた。(c)AFP boost1.85が出たけどVS2019でbcp.exeのコンパイルに失敗 1.84までは全く問題なかったので不具合だと思う。1.86を待つか。 read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる