で、1.51.0の目玉はなに?
とりあえずsandboxスレ使ってからにしようと思ってたけどたったか
10 :
デフォルトの名無しさん:2012/09/21(金) 18:40:36.12
BoostはC++11の登場によって必要性が薄れたとは言え
時期バージョンのネタを提供する場として生き残るだろう
特にC++11の新機能を使った物が書かれると予想
C++をこれ以上複雑な変態言語にしないで
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 }↲
ローカルクラスをテンプレート引数にするのはC++11から
なぜ関数内クラスはダメで関数内関数はアリなんだろう
参考書籍を買うとしたらどれがお薦めですか?
webで間に合うよ
面倒なのはインストールだけ
boostくらいインストールなしで最初から使えるようにしてくれよ
解凍したらすぐ使えるのばっかだろ
何GBもいらないもんインストールするくせに
肝心なもんは入れてくれないんだよな
23 :
デフォルトの名無しさん:2012/10/11(木) 18:16:22.10
boost の iostreams を使って 簡単なフィルターを作って遊んでるんですが、
filtering_ostream の最後にfile_sinkにして、そのファイルのパーミッションを変更して、書き込み不可にしたときに
1)try catchでくくっても例外が発生しない。
2)その filtering_ostream のオブジェクトの fail() メソッドでチェックしてもtrueになってない。
ということで、エラー無視して動作してる状態になってます。
書き込み不可とかでエラーの検出ってどうやるんでしょうか?
24 :
デフォルトの名無しさん:2012/10/11(木) 19:07:37.56
>>23 自己レスですが、ソースとネットを確認したら file_sink の is_open() で確認できるみたい。
filtering_ostream の fail() では確認できないみたい。 そういう仕様なのか? 良くわからない。
あぼーん
26 :
デフォルトの名無しさん:2012/10/15(月) 23:50:37.46
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 自体が活発じゃない既にオワコン
活発な気がするスレはあるけど
あっちは自演で成り立ってるだけだから
いまはtiwtterが活発なの?
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で確認。
てかこんな制限知らなかったよ…
またmbcsとwcsの違いを気にしない馬鹿か
何だsetlocaleすればよかっただけなのか…
すいません、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でコンパイルしたら
Boost.Context
なかなかかわいいな
41 :
デフォルトの名無しさん:2012/12/07(金) 22:08:02.78
zlib、gzipは操作できたんだけど
PKzipを操作する方法ない?
PKWARE社にきくといいんじゃないかな
43 :
デフォルトの名無しさん:2012/12/14(金) 13:20:13.79
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
spiritは重過ぎて残念というのがオレの評価
関数がインライン化されないと速度も残念だしな
forceinlineの強化版が欲しい
VS2012のツールセットのv110_xpでビルドするにはどういうコマンドラインになるの?
v110とv110_xpの二種類あって、バージョンだけ指定したらv110になるよね
Boostと相性の良いガーベジコレクターライブラリって何になりますか?
ネタじゃなくてマジで node.js
59 :
デフォルトの名無しさん:2013/02/06(水) 19:41:49.75
Version 1.53.0
February 4th, 2013 18:29 GMT
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 使っている企業が多いなら、このスレ、もっと進行するだろう
2ch頼みの企業とかやだわ
2chのプログラム板に来る奴が居る企業とかやだわ
会社からネットにつなげられる時点で3流会社だろ
そもそもそんなに議論することなんて無いだろ。
LANとトランスポート層を意識的に混同してるのか?
ファイアウォールもない会社なんか先行き知れてるぞ
>>73 >2chのプログラム板に来る奴が居る企業とかやだわ
73は企業の人じゃないとするとニート?
2chに書き込みなんかしてる
>>73 とか嫌だわ。その嫌な奴が嫌と言ってる事って...?
(クレタ人は嘘つきだ...)
>>78 学生じゃないか
社会人なのにどぶ板の2chに入り浸っている奴ってへんな奴が多いだろうし
ちなみにBoostについて日本語で情報交換できる場所って他だと何処にあるの?
Google
まぢ日本語は諦めてブックマークに
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って情報交換できるの?
始めて聞いた
ひょっとして思考盗聴とかのたぐい?
単なる時間的な前後関係を因果関係と思っちゃうタイプか
>>86 うん
ピットクルーの自給800円バイトの割には頑張ってると思うよ
>>84 WEBに公開するとgoogleの検索にひっかかるんだぜ。
2chとgoogleがありゃ大抵は情報交換可能。
ここの皆さんがいるじゃあないですか ンヒッ (キチガイスマイル)
92 :
デフォルトの名無しさん:2013/03/21(木) 07:48:20.63
boostは便利な昨日が多いけど、
マニュアルが読み辛いんだよな。
ファイルをインクルードして、
その中で自作のdefineで定義されたマクロが呼ばれた回数わかりませんかね?
やったことないけど Boost.Wave のトレース機能使ってみるとか。
95 :
93:2013/03/29(金) 18:32:38.45
純粋にはできなかったけど、
マクロ呼びたしをリスト化して解決しました
all(
func(123)
func(456)
func(789)
)
のように
BOOST_PPではSEQ型って呼ばれてる型で渡せるように
boostの質問もスタックオーバーフローにしたほうが
いい返事がくる気がする
人が多いうえにネイティブで英文の一次資料を楽に読める人だらけ、
質問と回答が基本で雑談・荒しが本筋に乗らない、レーティングとコメントで有益な情報を判別できる、
といったあたりはましだろうけどな
それでも回答のつかない質問・ずれた回答・間違った回答は人が多い分やっぱり多い
なんでboostPro使って外部参照が未解決になるんだ…
1.47にしたら今のところ安定してるよ
boostProでだめなら自前でビルドすればいいじゃない
素人だけど頂きました! シリアライズが神すぎます
尻洗い図
boost::iostreamsで、入力サイズと出力サイズが異なるinput_filterってどうやって作るの?
zlibのフィルタとかソース見たけどわからなかった…
フィルターに状態フラグを持たせて状態に応じて振る舞いを変える程度だと思うけど?
106 :
103:2013/04/26(金) 00:08:27.30
自己解決。
入力サイズと出力サイズが違うからおかしくなってたんじゃなくて、
入力データをバッファに入れるだけで次のやつに渡さない状態の時に0を返してたのがダメだった。
0返すとそこで終了しちゃう。
あと、zlibフィルタ、入力サイズと出力サイズ同じだった…
Boostのスレッド関連の機能使ってるライブラリと
OpenMP
一緒に使ったら
うまいこと排他制御して動いてしまったりするもの?
同じインスタンス使わなければ全く問題ないはず
圏論は難しいというから調べてみたら
boost.MPL
と同じ事だった
boostの一番スゲー機能ってなに
ここまで的を得ない質問をするとは
ひょっとしておぬし馬鹿だな
的を射る
正鵠を得る
的を(射て正鵠を)得る
BOOST_MSVCとか
>>110 thread lexical_cast あたりは毎日使うな
過疎りすぎだろ
話すこと無いからな
質問が多そうなBoost初心者は専スレでなく一般のC++スレのほうで質問するだろうし
Linuxの386サポート打ち切りなんて話があったが、boostでも386のサポートがなくなるな
ぼくは586なので余裕です^^v
boostの新しいの出たけど、winのコンパイル済みのものを配布なんてしているところなおのか?
自分でコンパイルなんてハードル高すぎ
そんなこともできない奴にはまだ必要ないよ
そもそも実装がヘッダしかないのもあるから仕方ない
俺はもうcppを自分のプロジェクトに入れちゃってるわ
123 :
デフォルトの名無しさん:2013/07/10(水) NY:AN:NY.AN
こないだ追加されたTypeErasureってどうなの?
試した人いる?
ようするにany,variantの超強化型なんで強力だぞ
そのぶん複雑なことをやろうとすると下準備のややこしさと面倒くささが増すが
geometryの実装の凄さはわかるんだが、使いこなせてるやついる?
boostは使われていないから、過疎っているな
C++11が出てからboostはニッチツールになって来たな
まあ面白いからこのまま続けてくれ
いや、今度はC++14の機能が使えるんだから重宝するでしょ
C++は黄忠
三国志の黄忠?その心は?
老兵
強い
諸葛亮が扱わないと猪突猛進してコロッと死ぬ
boostはソースコード見て勉強するためのもの
実際には使わんよ
optionalとかserializeとかlexical_castとか使えないと不便だ
optional<T&>って気になってたんだけど、optional_ref<T>として
使えるようにするかもしれない、みたいな話は結局どうなったんだろ?
これをやるには先ずこれを済ませとかないと……でもこれはこれとこれとこれが済んでないと……
えーとつまり発端は……なんて連鎖を取り扱うライブラリありますか?
Makeみたいな
普通にプログラム書けばそんな感じになるだろ
138 :
デフォルトの名無しさん:2013/09/14(土) 09:51:46.81
trac
>>137 Systemdみたいに並列にやりたいのでは
140 :
136:2013/09/21(土) 03:59:04.31
なんでもないです忘れてください捜さないでください
>>136 state machineやcontextで出来ないかな?
話題は?
管理者権限のPCでも
自分のホームディレクトリの下にLinuxのパッケージシステム作るのあったよね
apt-getとかemerge とかが動くやつ
あれだと自動で依存関係を解決してくれるね
>>143 >管理者権限のないPCでも
>自分のホームディレクトリの下にLinuxのパッケージシステム作る
これの名前忘れてしまって検索しようがないのだけど
誰か知りませんか?
cygwin
msys
mingw
bow
colinux
andlinux
boost::iostreamsの自作フィルタとか需要あるのかね。
147 :
デフォルトの名無しさん:2014/01/04(土) 22:34:52.14
使ってますかぁ
148 :
デフォルトの名無しさん:2014/01/16(木) 22:33:38.03
最近、githubに以降したんだけれど、
今のところ公式から落としてくるのには、
各リポジトリのすべてをクローンしなきゃいけないの?
ライブラリ単位でリポジトリが分散したせいでやりづらくなっているんだが
HEADだけ取れるだろ
151 :
デフォルトの名無しさん:2014/01/17(金) 08:45:45.19
先生!
大変です。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 :
デフォルトの名無しさん:2014/01/17(金) 08:49:56.58
std::size_t
153 :
デフォルトの名無しさん:2014/01/17(金) 09:32:38.42
>>152 ありがとうございます。
どこに定義すればよいのでしょうか?
また、この原因はboostでしょうか?
#include <cstddef>
>>150 thx
SSHがめんどいのでHTTPSで落としたよ
156 :
片山博文MZ無能 ◆T6xkBnTXz7B0 :2014/02/23(日) 00:53:10.90
大変便利であるからしてage。
157 :
片山博文MZ無能 ◆T6xkBnTXz7B0 :2014/02/23(日) 01:10:11.61
【Boostのここがスゴい1】
ほとんどのライブラリがリンクなしで(#includeするだけで)使える。※但しインスコが必要
【Boostのここがスゴい2】
C++11以前の古いコンパイラでもboost::shared_ptrなどのスマートポインタが使える。
158 :
片山博文MZ無能 ◆T6xkBnTXz7B0 :2014/02/23(日) 01:16:42.42
【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超える
必要なライブラリだけビルドしろよ
164 :
片山博文MZ無能 ◆T6xkBnTXz7B0 :2014/02/23(日) 12:29:25.59
Boostつかうと一気に実行ファイルサイズが10倍に?!
>>165 色んなオプションでコンパイルできるから…全パターンのコンパイルしたら結構でかいんじゃね?
流石に試したことはないけど…
>>163 自分で使う気が無くても
このライブラリをつかうにはboostを使ってね♪ってのがあるだろ
boost感染と呼ぶべきか
1.56.0まだかよ
>>168 それを言うならboost汚染ではあるまいか…
contaminated population
>>163 車輪の再発明を避けることを徹底すると必要なライブラリがどんどん膨らんでいくよ
便利そうだからと安易にライブラリに追加してると、便利そうだからと安易に利用することになって
依存関係が発生してしまう
そんなことは必要なライブラリが膨らんでから考える
いちいちzlibなりboost::serializeなり自作してられっか
>>174 >>173はboost自体の話。
いちいち必要なライブラリだけビルドするのは面倒だし、依存関係で枝葉のライブラリしか
削れないなら全部ビルドした方がましって感じ。
exeだとDLL版でもいいんだけど、プラグインdllだとexeと同じパスに置かれないことも多いし
32/64bitの区別の問題とかもあって暗黙的なDLLロードに期待できないんだよね。
だからboostのバイナリをDLして使うより手間がかかるからboost自体を巨大化されるのは困る。
VC11だと、bootstrappingが必要か。。。
時間がかかりそうだな。。。
178 :
デフォルトの名無しさん:2014/05/06(火) 15:21:54.64 ID:DynE4XBA
数年ぶりに戻って来たんだけど、今はLets Boostみたいな日本語で解説してるサイトは無いの?
付属のdocだと情報量が多すぎて疲れる・・・
頑張って英語読もう
コードもついてるしそんな難しくないだろう
boostなくても標準C++で間に合うようになって来てる
逆にまだboostじゃないとダメな機能ってどんなのがあるんだろう?
property_treeとかserializeとか
format ってどうなった?
boost使い始めたのはgregorianのためだったっけな一番最初は
その後scoped_arrayとかも使い始めた
怒らずにマジレスしてほしいんだけど progress_display に代わるものってあるの?
stdoutでいいんじゃね?
188 :
デフォルトの名無しさん:2014/08/08(金) 10:09:29.41 ID:bvhG3beM
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を使用するようになる。
211 :
208:2014/08/26(火) 00:28:28.83 ID:00zrwMl9
>>210 ありがとうございます。
BOOST_ALL_DYN_LINKなるキーワードがあったのですね。
#pragma comment(linker, "/NODEFAULTLIB:libboost_〜.lib")
ってやって必要なcppだけ本体と一緒にコンパイルリンクするのが一番楽
213 :
デフォルトの名無しさん:2014/10/06(月) 22:24:43.15 ID:tIlHofLk
ネットワーク関係はpocoと比べてどうなの?
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)'
の参照を確認してください
みたいか警告がいつも数十行出るんですが、「参照の確認」とは何をどうすれば良いのでしょうか?
>>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のキーに生ポインタ入れるのはさすがにマズイよね?
問題ない
問題ないけどmapで扱わずメンバにすればと思った
valueにshared_ptr、keyにはその生ポインタっていうのは良く使ってるなぁ
あ、特に問題はないのか。
何となくだけど、「生ポインタ入れたらヤバそう」って思い込んでたよ…
ナマポ
目的によるわな。
キーとしては単なる整数だしな。
生ポの開放時にキーも削除又は解放後は使用されないのなら特に問題無さそう
smart pointerのdeleterでキー削除すればいいと思うよ
10年前から放置されたHPに文句言うなよww
235 :
デフォルトの名無しさん:2015/02/01(日) 22:32:38.38 ID:0ZgW1UY4
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日ほど悩んで答えが出なかったので皆さんの力を借りさせてください。お願いします。
jamを別途インスコ
>>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 結構面倒くさい仕様だな…
勝手にフォーマット変更とかしてくれると便利だけどさすがに贅沢か…