Boostを語れゴラァ part5
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001BOOTS
2007/10/18(木) 08:09:35過去スレ
part 4 http://pc11.2ch.net/test/read.cgi/tech/1175663346/
part 3 http://pc11.2ch.net/test/read.cgi/tech/1158991211/
part 2 http://pc8.2ch.net/test/read.cgi/tech/1139313234/
part 1 http://pc8.2ch.net/test/read.cgi/tech/1091198276/
■関連サイト■
Boost C++ Libraries
http://www.boost.org/
Boost 翻訳プロジェクト
http://boost.cppll.jp/HEAD/
Let's Boost
http://www.kmonos.net/alang/boost/
boost info
http://shinh.skr.jp/boost/
0893オガちゃん萌え ◆tyvkWCNtzY
2008/03/23(日) 21:04:51OSうんぬんより、mutexは別スレッドからlock/unlock期間中のアクセスを待機させるから安全か
どうかとえば、使用は慎重を期するよ
別プロセスは関係ないが…
共有メモリやらメモリマップドファイルは別だけど
セマフォ、ミューテックスの使用は本当に必要であるかを加味した方が良さそうに思う
boost::thread::mutex(だっけ?) はでも便利だね
スコープから抜ければ勝手にデストラクタがunlockしてくれるのも楽でよい
自作してもauto変数なら当然かも試練、スマソw
>>886
悪の枢軸たるWindowsもそう考えると良いとこあるのかね
でもさ、結局printfなんかもさMSVCRT.dllなんかがラップしてんだよね
メイクファイルでビルドしようとしてリンクエラーで苦戦したことがよくあったなあ
>>888
>>891が答え書いてるけど、bindは便利だよな!
0894デフォルトの名無しさん
2008/03/23(日) 22:06:130895デフォルトの名無しさん
2008/03/23(日) 22:11:55なんで雑談してんの?
411 名前:デフォルトの名無しさん[sage] 投稿日:2008/03/22(土) 23:17:29
相談が無いからだろう
相談できる雰囲気でもないがね
412 名前:デフォルトの名無しさん[sage] 投稿日:2008/03/23(日) 00:44:28
何で雑談しているのかを聞く それも雑談なんじゃね?
自分の胸に聞くのがはえーんじゃね?
415 名前:オガちゃん萌え ◆tyvkWCNtzY [sage] 投稿日:2008/03/23(日) 20:37:34
>>410-412
まぁ固いこと言わないでマターリやろうよ
こんな事書く人間に何を言っても無駄かと
NGが得策
0896オガちゃん萌え ◆tyvkWCNtzY
2008/03/23(日) 22:25:51スレ違いってほど外れた話題はしてないつもりだが?
俺叩く暇あるなら、なんかboostについて書いてくれ
0897デフォルトの名無しさん
2008/03/23(日) 22:31:180898デフォルトの名無しさん
2008/03/23(日) 22:39:32時々コンパイラが音を上げるのが困る
0899オガちゃん萌え ◆tyvkWCNtzY
2008/03/23(日) 23:42:11STLスレで誰か書いていたが、EffectiveSTLにSTLのエラーは読むなってのがあって、実際に本棚に
埋もれたEffectiveSTL読んだらconstキャスト忘れとかのエラーを理解しろみたいなのが書いてあったよ
SingletonとAbstractFactoryパターンをよく使うんだが、AbstractFactoryをテンプレートにして
中にmap<int, string>かなんかやったときにwarningが出まくったことあったw
それこそ、この内容はSTLか。
boost一番よく使うのはツールだな
tokenizer、regex、bindなんかはもう無しじゃ生きていけない
0900デフォルトの名無しさん
2008/03/24(月) 00:33:17C++からその実装されたクラスをnewしてPythonに渡す。
といったような事がやりたいんですが、boost.pythonで出来ますか?
参考書籍、およびサイトなども教えてもらえたらありがたいです。
0901デフォルトの名無しさん
2008/03/24(月) 07:41:37俺はPython使い始めたばっかりで一方向の使い方しかしてないけど興味ある。
できたら教えて欲しいな。
0902デフォルトの名無しさん
2008/03/24(月) 10:14:150903デフォルトの名無しさん
2008/03/24(月) 13:56:39ドトネトは断る!
って、うそ。 C++/CLI は使ってるし。
とはいえ、非UNIXで動かしたいプログラムに
多いんだよな、Boost.Python 使いたくなるケース。
IronPython + mono でやれって?断る!
0904デフォルトの名無しさん
2008/03/24(月) 13:59:17ランタイムDLL類不要になるし。
0905デフォルトの名無しさん
2008/03/24(月) 15:53:59Lua + LuaBindとかSquirrel + SqPlusとかも考えましたが、
Boost.Pythonで無理ならSquirrelにするかな。
ランタイムDLLはオプションをdefineしてやればいらなくなると
どっかで読んだ覚えがあるんですが読み間違いですかね。
0906デフォルトの名無しさん
2008/03/25(火) 22:31:11Unknown compiler version - please run the configure tests and report the results
と言うワーニングが Boost を使っているソースででました。
リンクも成功し、実行もできるのですが。。
このワーニングを消すにはどのようにしたらよいのでしょうか?
0907デフォルトの名無しさん
2008/03/25(火) 22:56:111.34.1がでたのは、VC9が出る前だ。
0908デフォルトの名無しさん
2008/03/26(水) 01:00:40ヘッダーは VC8,VC9 共通みたいでした。
0909デフォルトの名無しさん
2008/03/26(水) 03:24:57boostのどのライブラリでワーニングが出ます?もう少し詳しい状況が分かると調べられるのですが。
0910デフォルトの名無しさん
2008/03/26(水) 05:28:280911デフォルトの名無しさん
2008/03/26(水) 10:04:29おいらは906じゃないけど、SVN で落としたのに置き換えたらエラーがでなくなった
あんがと
0912デフォルトの名無しさん
2008/03/26(水) 10:42:38コンパイル時に config/visualc.hpp 内のワーニングなので、ライブラリは関係なさそうなのですが。。
0913デフォルトの名無しさん
2008/03/26(水) 11:31:541.35の正式版が出るまで無視するってのは駄目か?
どうせ実害はないんだし。
0914デフォルトの名無しさん
2008/03/26(水) 12:17:22まぁ自分の使いたいライブラリがうまく動いていればそれでよし。
0915デフォルトの名無しさん
2008/03/26(水) 16:18:250916デフォルトの名無しさん
2008/03/30(日) 11:14:460917デフォルトの名無しさん
2008/03/30(日) 12:05:34News
* Version 1.35.0
New Libraries: Asio, Bimap, Circular Buffer, Function Types, Fusion, GIL, Interprocess, Intrusive, Math/Special Functions, Math/Statistical Distributions, MPI, System.
Updated Libraries: Graph, Hash, Iostreams, Multi Array, Multi-index Containers, Serialization, Thread, Wave, Xpressive.
March 29th, 2008 12:00 GMT
ひさしぶりのうpだけあって盛りだくさんだなぁ
0918デフォルトの名無しさん
2008/03/30(日) 12:19:330919デフォルトの名無しさん
2008/03/30(日) 12:32:340920デフォルトの名無しさん
2008/03/30(日) 12:47:12というかPOSIXを前提に設計されているようで、
Windowsだと素直に実装できないってのもあるのかな。
0921デフォルトの名無しさん
2008/03/30(日) 13:27:27敬遠してる
0922デフォルトの名無しさん
2008/03/30(日) 17:03:02と本スレ参考にv1.35を
�@vcvars32.bat実行
�Abjam --toolset=msvc-9.0 stage
としたんですが、以下のように出てビルドできません。
何か足りないツールでもあるのでしょうか?
MkDir1 lib
'C:\DOCUME~1\????' ???A?????R?}???h???????O???R?}???h?A
???????\???v???O???????????o?b?` ?t?@?C?????????F?????????????????B
mkdir "lib"
...failed MkDir1 lib...
MkDir1 bin.v2
'C:\DOCUME~1\????' ???A?????R?}???h???????O???R?}???h?A
???????\???v???O???????????o?b?` ?t?@?C?????????F?????????????????B
mkdir "bin.v2"
...failed MkDir1 bin.v2...
...skipped bin.v2\libs for lack of bin.v2...
...skipped bin.v2\libs\test for lack of bin.v2\libs...
...skipped bin.v2\libs\test\build for lack of bin.v2\libs
以下たくさんskipped
0923デフォルトの名無しさん
2008/03/30(日) 17:41:060924デフォルトの名無しさん
2008/03/30(日) 17:50:37ユーザー名は確かに日本語ですわ。
で、多分"Documents and Settings"配下で何かしようと
してるんだと思うんだけどユーザーだけ切り替えればいけるかな。
やってみる。
�@vcvars32.bat実行
�Abjam --toolset=msvc-9.0 stage
の手順は一般的に問題ないっすよね?
0925デフォルトの名無しさん
2008/03/30(日) 18:17:59administratorに切り替えたらビルドできたような気がする。
dllとかlibがbin.v2っていうフォルダに出来てる。
ただ、
bjam --toolset=msvc-9.0 stage だと
アップデートになってしもうた。
1.35で新たに追加されたAsioやら全てをビルドするためには
別のオプションがいる??
0926デフォルトの名無しさん
2008/03/30(日) 18:25:040927デフォルトの名無しさん
2008/03/30(日) 19:31:091.34.1の既存のものはビルドされた(アップデート)んだけども
1.35.0で新しく追加されたものがビルドされてないみたい。
bjam --builddir=builddir-vc9 --build-type=complete --toolset=msvc-9.0 stage 2>&1 | tee c:\boost.log
でやってみたんだけど、static、dynamic(dll)の二つのバージョンが出来たこと以外
変わらんかった。
http://www.boost.org/doc/tools/jam/jam/usage.html
には
bjam ( -option [value] | target ) *
でtargetを指定しなければ全てビルドされると書いてあるんだけどなあ。
0928デフォルトの名無しさん
2008/03/30(日) 19:50:45bjamの最新版は日本語メッセージが文字化けして???になるよ。
0929デフォルトの名無しさん
2008/03/30(日) 20:07:01ああそうなんだ。
とりあえず既存のものはビルドできるみたいだ。
release、debugとも出来てる。
asioとかがビルドできない。ビルド対象を指定するか
設定ファイルなんかが必要なんだろうか。
0930デフォルトの名無しさん
2008/03/30(日) 20:37:58asioはライブラリ不要のはず
0931デフォルトの名無しさん
2008/03/30(日) 21:16:540932デフォルトの名無しさん
2008/03/30(日) 21:28:170933デフォルトの名無しさん
2008/03/30(日) 21:56:29ホントだ。そうみたい。
もしかして1.35でライブラリ作成する必要のある新しいものって
無いのかも?
ソケットで遊んで見る。
0934デフォルトの名無しさん
2008/03/30(日) 22:32:330935デフォルトの名無しさん
2008/03/30(日) 22:40:410936デフォルトの名無しさん
2008/03/30(日) 22:42:11新しいものの中ではsystemが要ビルド。
0937デフォルトの名無しさん
2008/03/30(日) 22:45:49それならstage\libにライブラリできてるから成功してるっぽい。
0938デフォルトの名無しさん
2008/03/31(月) 01:02:350939デフォルトの名無しさん
2008/03/31(月) 01:17:39自分で指定するのめんどくさい。
0940デフォルトの名無しさん
2008/04/01(火) 02:50:31boost.pythonはpythonをcから呼びたい時だけ使うのがいい
0941デフォルトの名無しさん
2008/04/01(火) 14:55:030942デフォルトの名無しさん
2008/04/01(火) 21:32:570943デフォルトの名無しさん
2008/04/02(水) 02:49:16tokenizerを使用したプログラムをデバッグモードで実行したところ
超絶遅くて絶望したんですけど、これは回避できないですか?
0944デフォルトの名無しさん
2008/04/02(水) 03:17:270945デフォルトの名無しさん
2008/04/02(水) 17:54:19Boostの中の人はM$信者なの??
0946デフォルトの名無しさん
2008/04/02(水) 18:15:37信者どころか社員いるし
しかし、パスするテストを増やすのに必要なのは信者じゃなくて人柱と開発者だ
0947デフォルトの名無しさん
2008/04/02(水) 18:44:530948デフォルトの名無しさん
2008/04/02(水) 20:53:59どういう方法が良いでしょうか?
0949デフォルトの名無しさん
2008/04/02(水) 21:02:020950デフォルトの名無しさん
2008/04/02(水) 21:56:08struct parse : public grammar<parse>
{
template <typename ScannerT>
struct definitionmy(parse const& self) {
//略
int_p[bind(&parse::func, self, _1)]; //bindでメンバを渡す
};
void func(const int val);
};
こういうことですか?
他の方法って無いのでしょうかね?
毎回bind書くのはしんどいんですが。
0951デフォルトの名無しさん
2008/04/02(水) 22:35:21極力assign_aとかpushback_aとか定義済みのやつで済ませるようになった。
あと、そのfuncはconst付けないとエラーになるよ。
0952デフォルトの名無しさん
2008/04/02(水) 23:58:07bjam --toolset=msvc-8.0 -sBZIP2_SOURCE=〜 -sZLIB_SOURCE=〜 --stagedir=. stage
ってやってビルドしたら、なぜかreleaseビルドのマルチスレッドのlibファイルしかビルドされないんだが、こういう仕様に変わったの?
前はdebugとかも出てたよね?
0953デフォルトの名無しさん
2008/04/03(木) 00:33:38試行錯誤の結果、こうすれば全部ビルドされた
bjam --toolset=msvc-9.0 stage release debug link=static,shared runtime-link=static,shared
BZIP2_SOURCEとかは事前にsetしてある
0954デフォルトの名無しさん
2008/04/03(木) 00:56:22>funcはconst付けないとエラーになる
boost::functionに一旦入れてから使ったらエラーが出ずに
通っちゃったので気が付きませんでしたw
0955デフォルトの名無しさん
2008/04/03(木) 01:50:21どうやったの?
俺も今Spirit使ってんだが、constが厳しくて
mutableにお出ましいただいている。
0956デフォルトの名無しさん
2008/04/03(木) 02:15:28大まかには950で、
struct definitionmy(const parse &self) {
boost::function<void (const wchar_t*, const wchar_t*)> fnc;
fnc = boost::bind(&parse::func, self, _1, _2);
r = str_p("hoge")[fnc];
};
void func(const wchar_t *p1, const wchar_t *p2);
これで通ってしまいましたよ。
デバッガでfuncが呼び出されるのも確認できました。
0957デフォルトの名無しさん
2008/04/03(木) 02:18:10それで解決しました。でもブレークできない諸刃の剣です。
0958デフォルトの名無しさん
2008/04/03(木) 02:38:06おお、VC++ 2008でもGCC 4.2.3でもエラーでない。
ってエイプリルフールはもう過ぎたぞ。見事に釣られたが。
bindで束縛するときは値渡しだからコピーされているだけだw。
ref使うとやっぱりコンパイルエラーになる。
まあ俺も人のこと笑えない。同じようにbindしている場所がある。
メンバが解析データ保持のshared_ptrだけだから何とも問題が起きなかったわけだ。
0959デフォルトの名無しさん
2008/04/03(木) 04:27:58これってどのぐらい便利なの?
0960デフォルトの名無しさん
2008/04/03(木) 05:38:30http://www.itk.org/HTML/CableSwig.html
boost.pythonと比べたらどっちがいいのかな
0961デフォルトの名無しさん
2008/04/03(木) 15:50:02うは、素で気が付かなかったorz
0962デフォルトの名無しさん
2008/04/03(木) 16:46:25いなくても完了するように見えるんだけど、正しい?
Boost.Python のヘッダファイルやソースコード眺めてても
Python 自身のヘッダファイルはインクルードして無いように見える。
0963962
2008/04/03(木) 17:18:57ヘッダをインクルードしていた。とくにインクルールパス
を指定していないのになぜかビルドに成功する。
bjam の魔法かな? Windows XP2
0964デフォルトの名無しさん
2008/04/03(木) 18:37:290965デフォルトの名無しさん
2008/04/03(木) 23:12:19�d
夜中に手を煩わせて申し訳ない。おかげで全部のlibファイルビルドする事ができました。
bjam自体の仕様が変わったのか、libフォルダへのコピーをしなくなっていたけど。
0966デフォルトの名無しさん
2008/04/03(木) 23:38:48BOOST_DIR/stage/libにはいってない?
--stagedirオプションをつけないとデフォルトではstageディレクトリの中にlibが作られる。
0967デフォルトの名無しさん
2008/04/04(金) 20:10:02すまない、まさにそれだった。
0968デフォルトの名無しさん
2008/04/05(土) 00:50:46extra argument icui18n
なんてエラーが出て前に進めないよ!
まるで僕の人生のようだ。
助けて!
ICU は 3.8.1 使ってます。
0969デフォルトの名無しさん
2008/04/05(土) 01:08:19メモメモ
vc8環境下でICU3.8をビルドしてboost.regexで使うようにすると
icui18n.libとかicudata.libが無いっておこられる
そこでicuin.libとicuind.libをicui18n.lib icui18nd.libに、
icudt.libをicudata.libにコピー&リネームすると通る
regexのテストは一応全通過
本来はどうするべきなんだろうか…
ーーーーーーーー
ってコトらしいけど、どうしたもんかなぁ。
0970デフォルトの名無しさん
2008/04/05(土) 01:09:260971デフォルトの名無しさん
2008/04/05(土) 01:19:430972デフォルトの名無しさん
2008/04/05(土) 01:21:59個人的にはintrusiveが面白そうかなぁ。
0973デフォルトの名無しさん
2008/04/05(土) 01:47:03HAVE_ICU と ICU_PATH を同時に使っちゃだめだったんだ。
多分 HAVE_ICU はもう obsoleted で ICU_PATH だけ設定
すればライブラリファイルは自動判別してくれるみたい。
って、ライブラリのファイル名の問題は解決したけど、
結局以下のエラーでビルドできん・・・
G:/boost-trunk/Version_1_35_0/tools/build/v2/kernel\class.jam:93: in new
*** argument error
* rule object(searched-lib-target)@659.__init__ ( name : project : shared ? : search * : action )
* called with: ( icudt icuin icuuc : object(project-target)@79 : true : /C:/Program Files/ICU4C/icu4c-3.8.1/lib : object(null-action)@658 : : : : )
* extra argument icuin
G:/boost-trunk/Version_1_35_0/tools/build/v2/tools\builtin.jam:349:see definition of rule '__init__' being called
bjam を使いこなすには python の知識が必要なんだろうか・・・
0974デフォルトの名無しさん
2008/04/05(土) 03:01:120975デフォルトの名無しさん
2008/04/05(土) 03:45:58http://www.boost.org/doc/libs/1_35_0/libs/regex/doc/html/boost_regex/install.html#boost_regex.install.building_with_unicode_and_icu_support
ううむ、Windows + VC9 でうまくいかん・・・
直接の原因は buildin.jam で定義されている
class searched-lib-target : abstract-file-target
{
rule __init__ ( name
: project
: shared ?
: search *
: action
)
のコンストラクタの引数 name に、ICU4C で必要なライブラリを
3つ渡しているからなんだが( name は一つしか受け取れない)。
0976デフォルトの名無しさん
2008/04/07(月) 04:20:20標準正規分布のrandom variableを生成するクラスを作ったのですが、
class nrv {
public:
nrv() :
gen(time(NULL)),
dst(0.0, 1.0),
rv(gen, dst) {}
double val() const { // ここのconstをはずすとコンパイルできる
return rv();
}
private:
mt19937 gen;
normal_distribution<> dst;
variate_generator<mt19937, normal_distribution<> > rv;
};
上のconstをはずすとコンパイルできないのはなんででしょうか?
0977デフォルトの名無しさん
2008/04/07(月) 04:29:54この説明で判らないならC++初心者スレ行ってこい
0978デフォルトの名無しさん
2008/04/07(月) 11:25:54よくわかりませんでした(泣)
rv()はvariate_generator::operator()というのはわかりますが、それが手元のboost-1.34.1だと
result_type operator()() { return _dist(_eng); }
という実装になっていて、それが参照とかポインタとかを返してるから、ということでしょうか?
でもこれはdoubleを返すんじゃないかと思ったのですが。
あと、以下のコンパイルエラーの箇所でエラーになる理由は何でしょうか?
class nrv {
public:
nrv(int seed) :
gen(seed), // ここでコンパイルエラー。seedを定数(0とか1とか)にするとコンパイルとおる。
dst(0.0, 1.0),
rv(gen, dst) {}
private:
mt19937 gen;
normal_distribution<> dst;
variate_generator<mt19937, normal_distribution<> > rv;
};
0979デフォルトの名無しさん
2008/04/07(月) 12:20:35C++ではメソッドにconstをつけることができる。つまり、
result_type operator()() const { return _dist(_eng); }
となっていればできる。
後者は多分、seedの型がunsignedじゃないから
オーバーロードの問題が出ているのだと思う。
0980デフォルトの名無しさん
2008/04/07(月) 12:25:25- nrv(int seed) :
+ nrv(mt19937::result_type seed) :
0981デフォルトの名無しさん
2008/04/07(月) 12:30:45前半部分について
result_type variate_generator::operator()() { return _dist(_eng); }
↓
//some pseudo code
result_type operator()(variate_generator * const this) { return _dist(_eng); } //�@
一方、
double nrv::val() const {
return rv();
}
↓
//some pseudo code
double val(const nrv * const this) {
return (this->rv)();
}
↓
double val(const nrv * const this) {
return (this->rv).variate_generator::operator()();
}
↓
double val(const nrv * const this) {
return operator()(&(this->rv)); //�@の呼び出し
}
&(this->rv)の型は少なくともconst variate_generator *だが、�@のパラメータは
variate_generator *であり、variate_generator *をconst variate_generator *
では初期化できない。
0982デフォルトの名無しさん
2008/04/07(月) 20:02:160984デフォルトの名無しさん
2008/04/07(月) 22:31:17同じこと思った香具師はいっぱいいるから代表ってとこだろ
0985デフォルトの名無しさん
2008/04/07(月) 23:18:35>>982 = >>977 だよ
初心者スレに行っても、boostのことがわかってないと
>>981のような回答は難しいんで結局このスレで聞くのが良いと思う
0986984
2008/04/07(月) 23:33:44boost初心者スレ無いのか…
確かにboost以前の問題を解決できる人にboost初心者スレは必要ないような気もするし
スキマにはさまって身動きできない人を救済するのはこっちのスレの役目か
0987デフォルトの名無しさん
2008/04/08(火) 02:45:550988デフォルトの名無しさん
2008/04/08(火) 18:02:39regex のビルドできている人います??
Linux ではできてるんだけど・・・
レス数が950を超えています。1000を超えると書き込みができなくなります。