1 :
デフォルトの名無しさん :
2010/05/28(金) 11:49:47
4 :
デフォルトの名無しさん :2010/05/28(金) 21:38:34
boost.fiber をビルドしたのですが、以下のエラーがでてビルドできません。 解決策を教えて下さい。 C:/lib/boost/boost_1_42_0/libs/fiber/build\pyutils.jam:2: in load rule PYTHON_IMPORT_RULE unknown in module pyutils. C:/lib/boost/boost_1_42_0/tools/build/v2/kernel\modules.jam:283: in modules.impo rt C:/lib/boost/boost_1_42_0/tools/build/v2/build\project.jam:903: in import libs\fiber\build\Jamfile.v2:14: in modules.load C:/lib/boost/boost_1_42_0/tools/build/v2/build\project.jam:313: in load-jamfile C:/lib/boost/boost_1_42_0/tools/build/v2/build\project.jam:62: in project.load C:/lib/boost/boost_1_42_0/tools/build/v2/build\project.jam:763: in project.use C:/lib/boost/boost_1_42_0/tools/build/v2/build\project.jam:89: in load-used-proj ects C:/lib/boost/boost_1_42_0/tools/build/v2/build\project.jam:73: in load C:/lib/boost/boost_1_42_0/tools/build/v2/build\project.jam:168: in project.find C:/lib/boost/boost_1_42_0/tools/build/v2\build-system.jam:553: in load C:\lib\boost\boost_1_42_0\tools\build\v2/kernel\modules.jam:283: in import C:\lib\boost\boost_1_42_0\tools\build\v2\kernel\bootstrap.jam:142: in boost-buil d C:\lib\boost\boost_1_42_0\boost-build.jam:17: in module scope
ublas::vectorには==演算子が定義されていないのでしょうか?
6 :
4 :2010/05/30(日) 10:57:08
>>4 fiber\build\Jamfile.v2の
14行目の import pyutils ; を消す。
29行目の [ pyutils.linkage ] を "WindowsPE" に変更。
53行目の [ pyutils.architecture ] を "i386" に変更。
(pyutils.py の実行結果を直で書いた・・・)
で解決しました。
#include <boost/iostreams/stream.hpp> #include <boost/iostreams/device/array.hpp> #include <iostream> namespace io = boost::iostreams; char buf[] = {1, 2, 3, 4, 5}; #if 0 // (A) io::array_source src(buf); io::stream_buffer<io::array_source> sb(src); #else // (B) io::stream_buffer<io::array_source> sb(io::array_source(buf)); #endif std::istream s(&sb); (B)の場合はコンパイルが通るのですが、(A)の場合だと > C2664: 'std::basic_istream<_Elem,_Traits>::basic_istream(std::basic_streambuf<_Elem,_Traits> *,bool)' : 1 番目の引数を > 'boost::iostreams::stream_buffer<T> (__cdecl *)(boost::iostreams::array_source)' から 'std::basic_streambuf<_Elem,_Traits> *' に変換できません。 となりますが、理由がわかりません。 array_sourceを直接渡すか変数を介すかで、何故違いが出るのでしょうか? VC++2010 EE + boost 1.43.0
8 :
7 :2010/05/31(月) 11:47:01
いろいろ試してみたところ > io::stream_buffer<io::array_source> sb(io::array_source(buf)); が関数プロトタイプと解釈されている事が原因のようです。 これは言語的に正しい解釈なのでしょうか?
>>8 Yes.
Effective STL に載ってる有名な落とし穴。
10 :
7 :2010/06/02(水) 11:10:46
>>9 io::stream_buffer<io::array_source> sb(io::array_source buf);
という風に解釈されるんですね。
遅くなりましたがありがとうございました。
すみません質問です。
VisualStudioの2008と2010が入っている環境でboostをビルドしたところ、msvcのバージョン指定しない場合は「〜vc100〜.lib」等が作成されました
VS2010でサンプルアプリケーションを作って実行したところ正常動作を確認したのですが、欲しかったのはVS2008用のため、msvcのバージョンを指定してビルドしたのですが、
「〜vc〜.lib」というファイルが出来あがり、VS2008でサンプルアプリケーションを作って実行したところ「〜vc90〜.lib」が見つからずエラーとなりました
古いバージョンのビルドでバージョン表記を付けてビルドするにはどうすればいいんでしょうか。
参考にしたURLこちらで、バージョン指定のビルド時は「--toolset=msvc-9_0」を指定しました
http://www.kmonos.net/alang/boost/build.html
toolset=msvc-9.0
うおおおできたぁあああああああ!!! 有難うございます助かりましたm(_ _)m
bjam toolset=msvc-8.0 variant=debug,release link=static threading=multi runtime-link=static stage bjam toolset=msvc-9.0 variant=debug,release link=static threading=multi runtime-link=static stage bjam toolset=msvc-10.0 variant=debug,release link=static threading=multi runtime-link=static stage ウチはこれで容量節約
質問お願いします。 ublasで A=[B~t C^t]~t A,B,Cはベクトル Y 0 0 X=[0 Z 0 ] X,Y,Z,Wは行列 0 0 W この時のB,CやY,Z,Wが存在していてそれを元に AやXを作成したいのですが良い方法はありますでしょうか?s
A=[B^t C^t]^t ですね。すみませんでした。
ベクトルA,B,C と行列Xになんの関係もないじゃん。
そうですね。A,B,CとX,Y,Z,Wの間には関係がないです。 B,CをもとにA、Y,Z,WをもとにZをそれぞれ定義したいという感じです。
15です。 そのサイトは非常に参考にさせて貰ってます。 たぶんですけどsliceからのswapでいけるのかなぁ〜と考えてます。 ともかく色々試してみます。質問に答えてくれてありがとう。
ビルドしたライブラリ(.lib)の名前の後ろにつく文字列に、mtとmt-sという 2種類のものがあるのですが、どのような違いがあるのでしょうか? mtというのは、VC++のランタイムライブラリ設定で"マルチスレッド"を 選んだからだと思うのですが、sという文字列の意味がわかりませんでした。 初歩的な質問かもしれないですが、教えてもらえるとうれしいです
static
>>21 VC++のランタイムライブラリ設定でいうなら
マルチスレッド libboost_…-mt-s
マルチスレッド デバッグ libboost_…-mt-sgd
マルチスレッド DLL libboost_…-mt
マルチスレッド デバッグ DLL libboost_…-mt-gd
ただし、このDLLというのはCランタイムのDLLのことなので
BOOST C++ ライブラリをDLLで使いたい人のために
boost_で始まるlib/dllも出力されるので
bjam toolset=msvc-10.0 --build-type=complete stage
すると5.8GBにもなるという
weak_ptrってshared_ptrが無効かどうか知る場合に使えばいいですか?
27 :
デフォルトの名無しさん :2010/06/21(月) 21:29:27
何が悪いんだよ おまえ goto 有害説にしか見えないぜ
>>29 そんな言い訳が通用したらマルチは存在しない。
常識で考えればちゃんと取り下げてから来いよ。
>>25 できるけど、普通shared_ptrはコンストラクタで初期化するのだし
そういうコードが必要になるような設計に問題があると思う
if (p != NULL) {...} がバグの温床だからやめようというのと同じで
if (p.use_count()) {...} ってのも関心しない
検索してもなかなか出てこないのには好ましくないから
人に見せるような綺麗なプログラムにはあまり出てこないという背景がある
p.use_count() はともかく if (shared_ptr<Hoge> p = wp.lock()) { ... } あたりはかなり典型的かつ有用な idiom のような?
ブーリアンコンテキストでチェックするのは普通でしょ そのためにsafe boolが定義されてるんだから use_count()はデバッグやテストのためであって 製品版では使うなとドキュメントに書いてあったはず
34 :
デフォルトの名無しさん :2010/07/02(金) 17:48:50
へえ
ublasって 純粋なCと速度はあんまり変わりないの? 他のboostもコンパイルに時間かかるだけで実行時間は純粋なCとあまり変わりないの?
純粋なCってなんだよ この世には不純なCがあるのか?
全てはアセンブリ言語に変換・・・アセンブルされ、リンクし、バイナリは天に召される。 動けわがプログラムよ!
天に召されたらうごかないんじゃね
天はCPUなり
三途のバスを越え、閻魔CPUの裁きが下るそのとき、 あなたの運命は定まるでしょう。
41 :
デフォルトの名無しさん :2010/07/09(金) 10:47:13
boost::regex hosii("hoge ?\(");//boost::reg_expression<char> regex = 正規表現;にするとできない。 boost::match_results<const char*> results;//←もうこの辺から::を押しても出てこない boost::regex_search(data, results,hoge); fputs(results.str(0), wfp);←ここでエラー boostが全然できません error C2664: 'fputs' : 1 番目の引数を 'std::basic_string<_Elem,_Traits,_Ax>' から 'const char *' に変換できません。(新しい機能 ; ヘルプを参照) 1> with 1> [ _Elem=char, 1> _Traits=std::char_traits<char>, 1> _Ax=std::allocator<char> 1> ] 1> この変換を実行可能なユーザー定義変換演算子がないか、または演算子を呼び出せません。 キャストする ↓ error C2440: '<function-style-cast>' : 'std::basic_string<_Elem,_Traits,_Ax>' から 'char' に変換できません。 1> with 1> [ _Elem=char, 1> _Traits=std::char_traits<char>, 1> _Ax=std::allocator<char> 1> ] 1> この変換を実行可能なユーザー定義変換演算子がないか、または演算子を呼び出せません。 助けてください 簡単にC++で正規表現できるんじゃないんですか?VC++2008EE notCLI 正規表現で文字列取得して配列に入れたいだけです。どうすれば良いのでしょうか?
エスケープシーケンス std::string::c_str() まずC++の基礎を何とかしてください。
43 :
デフォルトの名無しさん :2010/07/09(金) 11:21:56
ありがとうございます。一応コンパイル通りました results.str(0).c_str() こんなのがあるなんて全然知りませんでした。
44 :
デフォルトの名無しさん :2010/07/09(金) 14:00:41
詰みました boost::regex hosii(" *hoge *\(");←ここで止まります。ハンドルされていない例外ですと boost::match_results<const char*> result; boost::regex_search(data, results,hosii); fputs(results.str(0).c_str(), wfp); 何が間違ってるのでしょうか? エスケープシーケンスが正しくないかもしれませんみたいな警告が出てましたが何か間違ってますか?
\→\\
46 :
デフォルトの名無しさん :2010/07/09(金) 14:14:35
>>45 ありがとうございました
一見\で\が文字化されそうですね
簡単さならxpressiveがヘッダファイルだけで済んで手軽 Static版の文法覚えちゃえば処理速度も期待できる ただしコンパイル時間は延びる
ぼくもほめて(´;ω;`)
まだまだ未熟だな。
ublasは中身替えられるから ATLASなどを使えばSIMD対応で速いと聞く ただATLASのコンパイルという壁が・・
regexはユーザーが入力した正規表現をそのまま渡しても平気かな?セキュリティーホールになったりしない?
Xpressive VC2008だと山のように警告が出る
そうか?型の整合性さえ取れれば何も言われないけどな 山のようにって言っても一部の警告がテンプレートの展開で連鎖してるんだろ
Boost.Xpressiveサイコー でも標準入りを果たしたStd.Regexの汎用性には負ける。
RegexってインタプリタパターンとかDSLになるん?
Regexはインタープリタ XpressiveはTMP、インタープリタ、両対応。
>>55 > インタプリタパターン
> DSL
って何?パターン?
よく知らないんだけど、正規表現の業界用語?
59 :
57 :2010/07/11(日) 23:49:52
> DSL Domain Specific Language 分野特化言語
Interpreter パターンとか Visitor と Composite 組み合わせて ParseContext 作っただけにしか見えないわ
実装詳細を見てわかった気になるヤツって多いよね
64 :
デフォルトの名無しさん :2010/07/17(土) 01:11:16
mac osx 10.6 xcode 環境で boost のインクルードパスをシステムインクルードの検索パスに追加してビルドすると、 /Developer/SDKs/MacOSX10.6.sdk/usr/include/c++/4.2.1/i686-apple-darwin10/x86_64/bits/c++locale.h:80:0 /Developer/SDKs/MacOSX10.6.sdk/usr/include/c++/4.2.1/i686-apple-darwin10/x86_64/bits/c++locale.h:80: error: 'vsnprintf' is not a member of 'std' などと言われて、コンパイルできません。 osx内のSDKのヘッダとboost のそれが競合してる見たい何だけど、どうやれば解決できませすか。
65 :
デフォルトの名無しさん :2010/07/17(土) 01:29:37
誰か
>>64 の解決策教えてよ。友達いないんだ。さみしいの。
それっす。有り難う。
OSXと関係ないが、VC++は<c**>でincludeしてもstdにならないんだよな確か
>>68 標準関数はstdに入ってるよ
同時にグローバル名前空間にもぶちまかれるが
>言語と戯れよう プログラミング自体が目的になってる方は死んで下さい
VC++2010だと、BOOST_SCOPE_EXITとかBOOST_FOREACH使うとクラスビューの 関数解析結果がおかしくなるんだが・・・
どこの馬の骨ともしれぬジャップがでっち上げた俺ライブラリなぞ論外
75 :
デフォルトの名無しさん :2010/07/22(木) 16:54:25
そういわずに育ててやれよ
これってジェネレーラーはLispでかかれてるんかいな? 落としてみたけどS式書いてあるファイルがみつからんよ??
本当の本体はGaucheのソースの中らしい
Gaucheのソースを解凍 lib/cgen の下
なるほど、サンキュ!
Gaucheソース ext/uvector のMakefile に使用例
boost-buildと、boost-jamの関係を教えてください。
恋人
英語のドキュメント読んでましたが、よく分かりませんでした。 まじめにお願いします。
lover
boostjamはインタプリタ
gauche.cgen.cise のコード読んでるんだが、これあったらboostいらないかもしれない
comp.lang.lispに書いてること信じるなら thinlispの方がgauche.cgen.ciseよりすごいかもしれない makefile *.hまで生成するっぽい
a
91 :
デフォルトの名無しさん :2010/08/17(火) 03:24:37
>>90 別にスレ建てたほうが注目してもらえるよ。
「S式でCを書くCiSEスレ」とかにすれば関数型ファンがすぐ集まるよ
94 :
● :2010/08/17(火) 11:20:40
適当なテンプレがあるなら、自分がスレ立てるけど
なんでCでこういうのむりやりやろうとするのか疑問だわ。 言語機能に組み込んで新言語つくりゃいいのに。
96 :
デフォルトの名無しさん :2010/08/17(火) 13:01:41
>>95 言語機能で提供すべきことと
言語自身を使って作るものの
単純明快な判断基準がウケたのがC
新基準を開拓に行くと出かけて帰りが遅いのがC++
lambdaが言語に組み込まれて良かったわ ずっとboost.lambda使えっていわれたらどうしようかと思った
>>95 lispの便利さを知ってしまうと他を使いたくなくなる
(コマンドラインgcc からVisualStudioに移ったぐらいの便利さがある)
しかし他から「成果はCかC++で納めてくれ」と言われることは多いらしく
cise とかthinlispとかこの手の試みがいろいろされてきたようだ
まあC++も最初はCのトランスレータだったし
lispそんなにいいとも思わんしいらんわ
誰かboostの構文生成するようなdefine-stm を作って公開しないか
103 :
デフォルトの名無しさん :2010/08/26(木) 16:40:58
質問です。 boost::tokenizer< escaped_list_separator_sjis > tok( csvLine ); for(boost::tokenizer<escaped_list_separator_sjis >::iterator p=tok.begin(); p!=tok.end();++p){ cout << *p + " ";//"\n"; これを実行するとすべてが1行にコマンドプロンプトに表示されます。 これをCSVファイルの並びと同じように行ごとに表示させたいですが どうしたらよいでしょうか?良い解決策がありましたらお願いします。 <例> a,e,d q,d,r r,u,t これを実行すると a e d q d r r u tのようになります。 これを a e d q d r r u t のようにしたいです。
csvLineに1行ずついれてるなら for( 〜 ) {
間違えて送信した for( 〜 ) { cout << *p + " "; } cout << endl; とでもすればいい そういう問題じゃないのか?
106 :
デフォルトの名無しさん :2010/08/30(月) 14:01:04
boost::tokenizer< escaped_list_separator_sjis > tok( csvLine ); for(boost::tokenizer<escaped_list_separator_sjis >::iterator p=tok.begin(); p!=tok.end();++p){ cout << *p + "\t"; } cout << endl; これを出力すると a e d q d r r u t なりました。ありがとうございます。 これをタブ区切りでtsvファイルに出力したいのですがどうすればよいでしょうか?
108 :
デフォルトの名無しさん :2010/08/30(月) 14:09:41
tsvってなに?
>>108 TabSeparatedValueフォーマットの略。
110 :
デフォルトの名無しさん :2010/08/30(月) 14:34:04
106に書き込んだものです。C++で質問したいと思います。 申し訳ありませんでした。
111 :
デフォルトの名無しさん :2010/08/30(月) 15:03:41
Boost.Polygonきたー
Boost.Polygonって何に使うのか全然わからね。
boost::regex re("(\\d+)(?:,(\\d+))*"); boost::smatch result; std::string str = "1,2,3,4"; if (boost::regex_match(str, result, re)) { for (int i=0; i<result.size(); i++) printf("%d: %s\n", i, result.str(i).c_str()); } このようなコードを実行すると1と4しかresultから取り出せないんですが、 1から4まで全て取り出すにはどうしたらいいですか? 実際はもっと複雑なフォーマットなので正規表現でなんとかしたいです。
((\d+)(?:,|))* ただのカンマ区切りならboost::tokenizerじゃだめなの?
1.44ってVC10とかのmove semanticsに対応してる?
CSVはきっちりやるなら一文字ずつチェックしていくしかないだろ。 ダブルクォートの処理とかマジめんどい
Boost.Polygon早速仕事で使ってみてる。 なかなかいい感じ。 でもまだ機能が少ないな。 他の表現法からの取り込み対応も必要だ。
119 :
デフォルトの名無しさん :2010/09/07(火) 14:20:33
多角形の頂点管理でもしてくれるライブラリかい?
3次元のポリゴン・メッシュを管理してくれるのなら使い道もあるのだが。
boost.interprocessってメモリアライメントを考慮してくれるんだろうか? 例えば、Win上で64bitアプリとWOW64で動いてる32bitアプリ間で 相互通信する場合はやっぱboost.mpiじゃないと駄目?
>>123 いまいち使い方わかってないんだが、ググってみたらCSVのパースも
シンプルな式になるもんだな・・・
面白そうだから今度やってみよう。
教えてくれてトン。
foo-baa.cpp ってファイル名使いたい でもboostではfoo_baa.cpp なんだよね FreeBSDのxtermだと _ 消えて見えないから見にくい
Boost.Logって1.45から? つうかreview scheduleにLoggingもあるんだけど やつ間接的にLogに殺されたということなのか Loggingは犠牲になったのか…
property_treeのini_parserってメモリ上の文字列に対して使える?
stream に対してなら使える。
>>129 string path = "C:\\test.ini"
istream stream( path );
property_tree::ptree tree;
read_ini( stream, tree );
これはいけるけど、
string test = "[test]\ntest=100"
istringstream stream( test );
property_tree::ptree tree;
read_ini( stream, tree );
これはエラーが出る。何か間違ってるかな
stringstreamのヘッダがインクルードされていないとかってオチ …はないかw
>>130 試してみたけど、PHOENIX_LIMIT のコンパイルエラー以外は普通に通ったぞ(Boost 1.44 + VC9)
とりあえずエラーの内容と環境貼れよ。
>>132 すまん、勘違いしていたようだorz
しょーもないミスをしていた。自己解決したんでスルーしてください
boost::polygonってlong long使えないのか。 std::abs(long long)が無いってエラーになる。
int64_t
そっちでも同じっぽい。 std::abs(int64_t)もstd::abs(__int64)も無い。
long longが規格に入るのはC99/C++0xからだからしょうがない
テンプレートで実装してなかったのは何か理由があるのか?
ストリーム暗号を作っているのですが、手動でやると復号できるのに プログラムでやろうとするとうまくいきません。2回同じ暗号化を すれば元に戻るはずなのにそうなりません。 出来ればコマンドラインで暗号化復号化の選択ができるようにしたいです。 初心者でよくわからないことが多いのですがよろしくお願いします。 if (argc < 2) { printf("error\n"); return 1;} sprintf(fin, "%.255s", argv[1]); sprintf(fout, "%.250s.perm", argv[1]); if(d==0){ fp=fopen("2.perm","wb"); fq=fopen("2","rb"); }else{ fp=fopen("2.txt","wb"); fq=fopen("2.perm","rb"); 暗号化するときに fp=fopen(fout,"wb"); fq=fopen(fin,"rb"); とするのはいいのですが、復号のときに暗号化されたファイルを 読み込んで処理しても復号できない。 何のデータにばけているのかわかりません。
boostといったいなんの関係があるんだ
マルチーズ
>>140 そこに気付くとは・・・やはり天才・・・
VC++10において、BOOST_TYPEOF(hoge)とdecltype(hoge)は等価になると思っていいんでしょうか?
VC10のdecltypeは、コンパイラがクラッシュする致命的なバグがあるとか。
大丈夫だ、問題ない
>>144 コンパイラがクラッシュするって本格的だな。
でも実行時にクラッシュするよりはマシだと思うけど。
なんでかしらんがdecltypeって文字の並びに一瞬もよおした・・ 本能が何かを感じたようだ
Microsoft製品はSP1が出てから乗り換えるのが基本 本体の安定性もだが、OSだとサードのソフトが、VSだとプラグインやSDK類の対応がすぐには為されないからな
VC9で1_44 pythonの埋め込みを試しているのですが メモリリークが発生してしまいます ↓のようなコードなのですがどこがおかしいんでしょう? class Hoge {}; namespace bpy = boot::python; BOOST_PYTHON_MODULE(Hoge){ bpy::class_<Hoge>("Hoge"); } int main( int, char **) { PyImport_AppendInittab("Hoge", initHoge); Py_Initialize(); bpy::object global_ns = bpy::import("__main__").attr("__dict__"); bpy::exec( "from Hoge import *\n" "h=Hoge()\n" , global_ns , global_ns ); Py_Finalize(); return 0; } 同等のことをクラス(Hoge)ではなく、関数で行うとメモリリークは起きません
Macのgccっていろいろ変らしいのだけど boostはちゃんと動くの?
Boost側が頑張ってるから大丈夫
variantってwitch()で型を判断するのダサくないですか? なんかいい方法無いでしょうか
Visitor使え。
∧∧ /⌒ヽ) もはようちゃん i三 U 〜三 | (/~∪ 三三 三三 三三
ファンクションオブジェクトを型ごとにつくればいいのか。。。
>>159 オブジェクトはひとつでいい。すべての型に対応するオーバーロードがあれば。
>>154 if (T* p = boost::get<T>(&v)) ... おすすめ。
autoでどうにかならないの?
spirit::classicのコードをメンテというか改造使用と思ってるんだけどこれを期にspirit v2に移るべきでしょうか? 機能追加するので全面書き直しOKという前提で。
V2ならパース結果をコンテナやタプルに格納する処理を超簡単に書ける。 Boost.Fusionとの連携もすごい。Boost.Qi も出始めと比べて安定して枯れてきてる。 Classic のコードを保守しなくていいなら乗り換えない理由はないと思う。
コンパイラの負担が阿呆ほど増えるけどな
Spirit 使ってる時点で既にコンパイル時間はboostしてるだろ。
sourceforgeのファイル一覧がひどいことになってるな 何のベンチマークだよこれ
boostを使用してだいぶ開発が進んだ頃に以下のエラーが出るようになりました 1>d:\sdk\boost_1_44_0\boost\type_traits\detail\is_mem_fun_pointer_tester.hpp(1526): error C2061: 構文エラー : 識別子 'clasw' 1>d:\sdk\boost_1_44_0\boost\type_traits\detail\is_mem_fun_pointer_tester.hpp(1527): error C2365: 'boost::type_traits::is_mem_fun_pointer_tester' : 再定義; 以前の定義は '関数' でした。 1>d:\sdk\boost_1_44_0\boost\type_traits\detail\is_mem_fun_pointer_tester.hpp(1527): error C2998: 'boost::type_traits::yes_type boost::type_traits::is_mem_fun_pointer_tester' : テンプレート定義にはなれません。 リビルドしてもこのエラーが出ることもあるしでないこともあるし、出現位置もバラバラで全く原因がわかりません 上記ファイルを使用する機能や上記エラー内容が分かれば教えてください
claswこれなんだ
わからないです。そんなもの見つからないし、そんなコードがあったら毎回エラーになるはずですよね・・・
とりあえず boost/function.hpp 使ってるところをすべてコメントアウトしたら出なくなったかも
と思ったら21回目のリビルドででました・・・
ちなみにIDEはVisualStudio2010Express x86ターゲット、デバッグビルド CPUはCore2Duoです
とりあえずエラーになってしまったオブジェクトも再ビルドすれば普通に通るので、何度がビルドすれば実行ファイルはできます コンパイラのバグかな?
ディスクが壊れてるんじゃね?
>>174 VC10なら使える人が多いんだから、エラーの出るソース晒してみそ
ビルドのやり直しで通るなら、簡易ビルドをOFFにしてみるてがある。
念のためだけど、Debug フォルダ全消しはしてみたよね?
>>176-178 レスありがとうございます
boostのディレクトリを丸々コピー→古いのを削除→新しいのをリネームしたら出なくなったっぽいです。
ディスク障害だったのかな・・・しばらく様子を見てみます
昔はc++を喜んで使ってたが lisp使うようになってからは lispでデバックしてc++は自動生成するだけだわ それにしてもc++の案件多いなあ
>>180 最近のlispはC++にコンバートできるんだ?
Cへのコンバートなら良く見かけるんだけど・・・。
あとSchemeで実用レベルのCorC++コンバーターとかあります?
>>180 Lispのどこらへんが魅力ですか? いや、マジに質問で。そっちのが効率いいなら
そっちに乗り換えるのもありかなと。
>>182 Lisp族の魅力はググればいろいろ読めるよ。
切ったりくっ付けたりかね
lispは合理的ではあるけど、アプリのすべての部分をlispで書くのは無茶じゃないか?
サポートされるライブラリしだいだとおもうけどね。
関数単位はCで書いてフレームにLispとかが良いのかね
それもありだね。
あなたにVacuum!〜ちょいやわらかめ〜
Boost ってweb frameworkないの?
馬鹿は死んだほうがいいね。
javaをc++の方言としてコンパイルする方法あるみたいだから tomcatあたりをc++としてコンパイルしたらいいんでないの?
メモリーが無限にあればGCなんていらなくなるな。
boostのmulti_arrayってコピーすると ポインタで共有するんじゃなくて内容丸ごとコピーするのね 普通の配列みたいに共有して、不要になったら解放ってできないかな shared_ptr<multi_array<T,int>>にするしかない?
>>194 「普通の配列」が何を指してるのか知らないけど、言語組み込みの配列も std::vector も
boost::array も共有なんて動作はしません。
で、共有したいという目的に対して shared_ptr では何か不満なの?
flyweightはダメか?
194の配列とポインタの理解度に不安がよぎるな
どうせJavaから来たニワカだろ。
200 :
194 :2010/11/05(金) 16:05:03
表現が悪かったっす クラスメンバに多次元配列がほしいのですが、コンパイル時にサイズが不明なので、 言語組み込みの配列の配列を動的に確保して、多次元配列にしていました 管理が面倒なのでmulti_arrayを使うことに変更したいのですが、 インスタンスをコピーすることがままある&配列の中身は変えないので、 どうせなら配列の中身を丸ごとコピーしないで、ポインタだけで共有したいな、と 目的にはshared_ptr<multi_array<T,int>>が一番合致するんですが、 そうすると結構ソースコードを書き換える必要があるので
shared_ptrだと不味いけどmult_arrayがまるごとコピーじゃなかったら問題なかったってことは *とか->の話なのか?
>>200 そんなに書き換えがいやなら、元の名前で multi_array<T,int>& とか multi_array_ref とかを
別で置いたらいいんじゃね?
204 :
デフォルトの名無しさん :2010/11/20(土) 09:47:50
あれ・・・bjamでビルド失敗するんだがなんだこれ 1.44以前や最新のリポジトリだと問題ないんだが
1.45 VC10でビルドできたよ。 bjamがアンチウイルスに引っかかることは昔あったな。
1.45ビルドできたと思ってたら、アプリのビルドで未定義外部シンボルが出てきた。
208 :
205 :2010/11/20(土) 19:08:36
zipや7zで圧縮されてるソースだと駄目だったけどbz2のはビルド出来た 解凍か何かでしくじってたんではないかと思う
あー、解凍云々じゃなくて、ICU入れて--installオプションでビルドしようとするとしくじるみたい MPICHも絡んでるかもしれん bjamはフル機能でビルドしようとすると途端に動作がおかしくなるんだよな・・・
駄目だ、Regexビルドしようとするとエラー吐く わけわからんちん
今落としてやってみたが普通にビルドできたぞ
win vc9環境. 公式から落としてきた bjam.exe だとエラーで、 bootstrap.bat で生成したbjam.exeだとコンパイルできた… そういうものなの?
せっかく入ってるんだからそっちつかえってことじゃね
214 :
210 :2010/11/21(日) 02:54:08
今までは最新のリポジトリからビルドしたbjam.exeを常に使ってたんだけど、
>>212 のレスを見て1.45リリース版のソースからビルドしたbjam.exeを使ったらビルド出来た
今回のリリースはちょっと癖があるな
一番でかい更新はbjamってことか
216 :
207 :2010/11/21(日) 13:36:23
>>207 のリンクエラーは俺のミスでした。
間違えてx86でライブラリビルドしてx64のアプリをビルドしてました。
x64でboostのビルドやり直したら直った。
x64とx86ってライブラリ名同じなんだけどそういうものなの?
むしろ別なのを見たことがない
>>217 / / '" / / ,,-、 /、ヽ\ ゙i;,-''" / ./ /─''''" ̄ ,,/
/ ./ / ,,,-‐'"-/ / ./ ゙" "\ ゙i;, | 、// / " ,,,/
/ ,-''/ / ,,-''"_ / // ヽ l / レ'/~ /‐/
/ / | l| ,,-'"/゙/,」| / ..::;;;,,, } / |~ ,,-‐,,,-''' //~
/ /-'''''| | /l /‐'''/'' .人 i' .:: :;'" / / l ノ゙i// ,,-‐'"──==
//'" ゙i;: | /‐' ./,, ,,ノ ゙i;,. | _,,-ヾ.// ノ ,-''" l | ‐'" ,,,-‐二
レ' ヽl:i' ./ )'、‐,\゙i;: | ,,,-‐二-┬ナ" /‐'"‐ 〉 ,i'───'''" ̄~-''"
,-‐',ヽ|'" ./゙ヽ-ゝ='\゙i,'''ヽ -゙=‐' '" ,‐'ノ,, /‐''" ,,-‐'''"~
/ / ;;:. ──ヽ, ゙i;'''''' , ゙ "-‐'''''""" 〔_,/ ゙ヽ'-'"~
/ / / ,; ,,_}_ ゙、 ./__,, _,, / \
,;' / ,;;;:;:/;: ,, ~ ヽ ヽ. ヽニ‐'、 / / ゙i,_ おめぇ、ここ大丈夫か?
./ '' ,l,,,,,,/ 〉 ゙ヽ、 '''' ,,-''" / ゙i.\
/ / ヽ / ゙ヽ、--イ~;;:'" // ::;:;:;: | \
i /  ̄ ゙̄" |;:" // ヽ-‐'''"~l|
./ ゙''''ヽ、,,-‐''" .i /,;'" _,,,,,,,,,_,,,-‐'''-''"~ |
(" ̄"'''''‐--、,,_i' // '",,-─'''" ,,,-‐'",-‐'" ,,,,-‐ .___|
i' ゙'':::::::::::::::::::::::}
CUDAのDLLは32bitと64bitで名前が違うな
Intelのライブラリも名前違ってたな。
Boost インスコ・コンパイルしてみた 容量でか杉わろす
32ビットと64ビットのライブラリでファイル名一緒だから、出力ディレクトリを変えている 自分はstage派だから--stagedir=stage32とstage64
(´;ω;)自前 gcc-4.6.0(win) で signals だけが build を失敗する・・・orz 自前 gcc-4.5.1,4.5.2(win) では、build に成功するのにヽ(`Д´)ノウワァァァン
msmを試してみてるんだけど コンパイルに時間かかるね
gccはバージョンによってエラー吐いたり吐かなかったりで始末に負えん
gcc に限ったことじゃないだろう。
Boostはとくにひどいね
>>225 (´・ω・) log 吐かせたら stl_map.h の所で error してた
取りあえず、自前 gcc-4.6.0 の事なので放置・・・(´;ω;`)
以下、一部抜粋
-----
In file included from c:\mingw\bin\../lib/gcc/i686-pc-mingw32/4.6.0/include/c++/map:61:0,
from ./boost/signals/detail/named_slot_map.hpp:20,
from libs\signals\src\named_slot_map.cpp:12:
c:\mingw\bin\../lib/gcc/i686-pc-mingw32/4.6.0/include/c++/bits/stl_map.h: In member function 'void std::map<_Key, _Tp, _Compare, ・・・ < 略 >
libs\signals\src\named_slot_map.cpp:105:23: instantiated from here
c:\mingw\bin\../lib/gcc/i686-pc-mingw32/4.6.0/include/c++/bits/stl_map.h:626:9: error: call of overloaded
c:\mingw\bin\../lib/gcc/i686-pc-mingw32/4.6.0/include/c++/bits/stl_tree.h:763:7: note: candidates are: void std::_Rb_tree<_Key, ・・・ < 略 >
こんなガラパゴスで愚痴ってたって解決せんぞ さっさとBoostコミュに報告しろ
「自前」なので放置、ってことは gcc の中身をいじってるんじゃないか? 相談したいならエラーメッセージを省略とか、わけわからんことするな。
>>231-232 CYGWIN+MinGW+GCCスレでもずっとこの調子で長期にわたって
住民を困らせてるやつだから相手にしないほうがいいぞ。
あら、そんな奴だったのか ならば死ぬがよい
236 :
うp :2010/11/28(日) 23:31:48
237 :
うp :2010/11/29(月) 05:34:15
SpritiとかQiとかYacc使えばいいのに
boost.FC++ は何故採択されなかったのか
Boost.Coroutine がレビュースケジュールに入ってない 結局入るの?
BOOST_SCOPE_EXITでメンバ関数を呼びたいときって CMyClass* pthis = this; BOOST_SCOPE_EXIT((&pthis)) { pthis->MemberFunc(); } BOOST_SCOPE_EXIT_END; こうしないと駄目?
gccでC++0xオプションつけても動きますか?
static boost::array<int, 5> Array; のようにboost_arrayにstaticを付けるとvc2005ではデバッグ時にシンボルとして扱ってくれずに ブレークポイントもウォッチも出来なくなりました。 これはboost::arrayをstaticにしてはだめということでしょうか? それともvc2005が対応してないだけなのでしょうか?
arrayを何とかして要素数の指定無しに使いたいんですが、無理なんでしょうか。 array<int, 3> a = {1,2,3};の要素数は推測して欲しいです。
int a[] = { 1, 2, 3};
>>245 その場合begin()やend()が提供されません
boost::rangeのbegin()とend()を使えばいいのでは?
なぜYes No判定関数は必ず is_foo なんだろう
Is 〜はyesかnoしか返さないからだろ
>>249 if (x.is_foo()) ... が英語の自然な文として読めるからだろ
すみません質問です。 Win32のAPIによくあるコールバックから手軽にメンバ関数を呼びたくて boost::bindでクラスのメンバ関数にバインドしたいのですがうまくいかず困っています。 具体的にはSetWindowsHookExに渡すHOOKPROCに、以下のメンバ関数を割り当てたいです LRESULT App::HookProc( int code, WPARAM wp, LPARAM lp ) ちなみにHOOKPROCの定義はこんな感じ typedef LRESULT (CALLBACK* HOOKPROC)(int code, WPARAM wParam, LPARAM lParam); こんな感じで描いてみたんですが SetWindowsHookEx( WM_IME_SETCONTEXT, boost::bind( &App::HookProc, this, _1, _2, _3 ), NULL, 0 ); 結果は次の通りです 'SetWindowsHookExW' : 2 番目の引数を 'boost::_bi::bind_t<R,F,L>' から 'HOOKPROC' に変換できません どう書いたら通るんでしょうか。よろしくお願いします
無理に決まってんだろ 静的なメンバ作ってそこから呼ぶしかない
インスタンスがあるならそれ使って呼ばせられなかったっけ
呼び出し規約と引数をHOOKPROCに合わせたトランポリン関数を 動的に生成して…とか考え始めて無駄な時間を過ごすのが俺は好き。
>>252 std::functionを使えばいい。
std::functionのオブジェクトのポインターをLPARAMとかを経由して渡す
コールバック関数は、ポインター経由でfunctionを使う。
LPARAMはそういう用途じゃないから渡せなくないか?
や、気のせいだった
class hoge{ virtual void f(); }; class fuga : public hoge { void f(); }; x_queue<hoge> q; q.push(hoge()); q.push(fuga()); q.front().f(); // hoge::f q.front().f(); // fuga::f こんな感じのコンテナってboostにない? ようするにptr_vectorからnewも隠蔽したような感じの stl基準満たしてなくてもいいです
あ、間違えた q.front().f(); // hoge::f q.front().f(); // fuga::f ↓ q.front().f(); // hoge::f q.pop(); q.front().f(); // fuga::f
>>259 本当にほしいなら ptr_vector をラップすりゃいいんだろうけど、
あんまり意味があるとは思わんな。
.
Windows 7 64bit Visual Studio 2010 に32ビット、64ビット環境を作りたくて boost1.45 をこのようにインストールしたんだが大丈夫?
↑の続きです bootstrap.bat bjam --toolset=msvc address-model=64 --stagedir=./stage/x64 link=static,shared release debug stage bjam --toolset=msvc address-model=32 --stagedir=./stage/x86 link=static,shared release debug stage
boost.fusionにlambdaの配列入れたいけど無理っぽい
Boost.Chronoがtrunkにきたな ・・・ところでBoost.Chronoってナニ?
C++0x の <chrono> の Boost 実装版。
時計?
検索してまで知りたくないなら、それまでのこと
質問があります。 boost で document を作成したいのですが、 その時、doxygen に対して オプションを渡したいです。 doxygen 単体の実行であれば、Doxyfile に書き込むものです。 色々調べて、jam ファイルの中に <doxygen:param>VAR=VAL と、いった記述を見かけたのですが、書き方がわかりません。 質問をまとめると、 boost 全体の document 作成に対して、効かせたい doxygen の設定がある場合、 * どこのファイルに * どのように 記述したらいいのかということです。 ご存じの方、教えていただけないでしょうか?
並行mapないの?
274 :
xfsd :2011/01/24(月) 22:12:44
boostでベクトル*区間行列の計算のプログラムを作りたいのですが、うまく作れません 。教えてくれませんか
>>274 まずは作ってみたコードと、うまくいかなかかった結果と、期待している結果とがわかるようにするんだ。
STMなんでboostにはいってねーんだよ いれろよ おねがいします。
277 :
xfsd :2011/01/25(火) 23:06:59
#include "stdafx.h" #include <iostream> #include <boost/numeric/ublas/matrix.hpp> #include <boost/numeric/ublas/io.hpp> #include <boost/numeric/interval.hpp> #include <boost/numeric/interval/io.hpp> namespace ub = boost::numeric::ublas; namespace bn = boost::numeric;using namespace std; int main() { typedef bn::interval<double> xinterval; typedef ub::vector<double> xvector; typedef ub::matrix<double> xmatrix; xinterval a(1,2),b(1,3); xmatrix c(2,2); c(0,0) = 1.; c(0,1) = 0.; c(1,0) = 0.; c(1,1) = 1.; xvector vec(2); vec(0) = 2.0; vec(1) = 0; std::cout << "行列 * ベクトル = " << prod(c , vec) << std::endl; system("PAUSE"); return 0; } 行列*ベクトルはできたのですが、区間行列*ベクトルができません。誰か教えてくれませんか?
関係ないけどublasってopenCVみたいに初期化できないの? Mat M = (Mat_<double>(3,3) << 1, 0, 0, 0, 1, 0, 0, 0, 1);
>>278 最近のアップデートで初期化メソッドが追加になったはず
280 :
デフォルトの名無しさん :2011/01/30(日) 20:49:03
そうなのか
あしたはみそか
明日は晦日、今日は三十日。どちらも読みはみそか。
さむい ねむい
明日は朔日
boostに日本人提案のものあるの?
サッカーはナガトモが世界のリーグ行ったのに コンピューターサイエンスは世界のライブラリに名を連ねる事ができないのか
progessが採用されるんだから誰でもOKな筈だ
>>286 パッチやバグ報告ならいくつかあるみたいだね。
>>287 日本って,他の奴の成果をtake,take,and takeで自分の成果は情け無い程度giveするが国技
だからコンピューターサイエンス(IT)でも他の奴の成果をtake,take,and takeし
自分の成果は情け無い程度にgive。
boost::any向け総称関数をMLに投げてみたことあるけど、誰も興味無さそうだったので放置してる。 giveした所で誰も反応してくれないからなあ。
最低限、反応されるまで声上げ続ける位のガッツがなきゃどうにもならんだろ キンタマ付いてんのかお前
ついてなかったらどうするんだよ 責任取れるのかお前
責任とってもいいの?
///
ここまでテンプレ
>>291 あまりにも情け無いgiveでゴミ扱いなんだろ
本人が凄いgiveと思っているだけじゃね
298 :
デフォルトの名無しさん :2011/02/05(土) 19:55:10
アイディアってのは思いついてから使い道が見つかるまで何年かかるかわかんねえ 思いついた奴が生きているうちかどうかもわかんねえ 大勢に知らしめるところまでが、思いついた奴にできることだ 芽が出るにせよ出ないにせよガタガタさわぐのはみっともないだけだ 俺に言わせれば思いつくこと自体に満足できない奴は俗物だ
何を思いついたんだ?
300 :
デフォルトの名無しさん :2011/02/05(土) 22:13:47
色々だよ 例えば周波数帯の合わない検波器の使い方とか 「ある処理」を非再帰で片付ける方法とか
その思いつきどうboostと関連あるんの?
302 :
デフォルトの名無しさん :2011/02/05(土) 22:56:49
逆に boost と関係ないものって何だ?
boostを使わないプログラム
まさか、boostを使わないプログラムに、ここはboostで出来るから変えろ! とかわ言わないよな?
そんなのRubyのひとだけだよ
> boost と関係ないもの boost のライセンスと相容れないものは とりあえず boost と無関係
>>298 Haskellのライブラリなんか殆どが何に使えるのかわからん
spiritの機能を動的に使う方法ないですか? 組み込み言語のほうで構文決めたいんですが。
5年前の長友は怪我で試合出場どころか 観客席で応援として太鼓を叩くだけだった体たらく 今や世界のインテルに移籍して 口だけじゃなく世界一のSBを目指してる 頑張ればお前らだって(精神の)怪我で社会出場どころか 2ちゃんねるでキーボードと情弱叩くだけだった体たらくから 5年後にはBoostにライブラリを採択されるような 世界級プログラマになってるかもだぞ! 早く世界のインテルに移籍して 愚痴だけじゃなく世界一のSEを目指せ!Σd(`・ω・´)
BoostやるよりPythonやっといたほうがいいよ
BoostとPythonを並べる理由がわからない… もしかしてBoostのこともPythonのことも一切分かってない馬鹿なら 並べて云々できるってことなのか…
Boostと並べたいならDだろ
馬鹿なんだろう ほっとこうぜ
Eclipse CDTでboostのバージョンが上がる度にフォルダ名を変えるのが 面倒臭いので、"Boost"という単純な名前にしてしまった これだとパッと見バージョンを間違える事があるけどいちいちプロジェクトを 書き換えなくていい
チラ裏
>>312 D はもう終わってる
Boost はまだ始まっていない
Boostは始まってるだろ
ちゅうか、Dと比べたら、Boostは既に市場に行き渡ってると言っていい状況だよな。
全然始まってるじゃんよ。
BoostとDを並べる理由がわからない… もしかしてBoostのこともPythonのことも一切分かってない馬鹿なら 並べて云々できるってことなのか…
やる氣のないレス改変だなあ
気持ち悪い
ンギモッヂイイッ!!!ハッハッハッ……
Polygonの活用方法がいまいちよく分からないんだけど 使ってる人がいればどんなふうに使ってるのか教えてくれ
なんでPythonのライブラリがあるの? Pythonはそんなに優遇されてるの?
ruby厨乙
何でって、書いてくれる人がいるからあるんだろ。
こちらboostン宇宙基地
multi_index_containerの質問です。 classをデータとして登録してみたのですが、 get<0>()で取得した場合、constメンバ関数しかアクセスできませんでした。 BOOST_FOREACH( const Hoge& h,hoge.get<0>()) { h.test(); } constを付けないとコンテナ側のコンパイルエラーとなってしまい、 constを付けると test()がコンパイルエラーとなってしまいます。 multi_index_containerは、const利用が前提なのでしょうか? それとも、constを外して利用する手段は存在しますか? 一応、get<0>()以外にそういった用途の物がありそうなのですが、 見つけられなかった・・。
Boost.MultiIndex の実装は、std::set に近いと考えればいい。 自由に要素を書き換えられたら要素のソート状態が崩れるだろ。
やはりそうですか、 すっきりしました、ありがとうございます。
335 :
デフォルトの名無しさん :2011/02/21(月) 21:01:12.20
regexの一文字マッチのドットを 日本語の一文字に対応させることってできます?
wregex使えばいいよ
c++の列挙体をboost.python使ってpythonから扱いたいんだがどうすればいいんだ?
338 :
337 :2011/02/21(月) 21:51:13.44
ごめん自決した
マジか。漢らしいな
341 :
デフォルトの名無しさん :2011/02/22(火) 15:49:23.13
Boost.lclなるものが加わったみたいでなんじゃこりゃと思ったらIclかよ フォントによっては区別つかねーよ
Boost のドキュメントのフォントだとまじで区別つかない。
Iclって何するんだ? 名前からすると間隔つーか値の範囲を持ったオブジェクトあたり?
時間間隔をキーにしたコンテナじゃないか?
boost.Intervalじゃ[1,3)みたいな一つの開区間しか表せないけど 数直線状の任意の部分を表すには[1,3)と[3,5)と[7,9)みたいに複数の区間がいるから それを扱うものなんじゃないか?
ごめん、×開区間→○区間な
>>350 それを実現するのが interval_set
interval_set 間の集合演算もできる。
interval_map というのもあってこっちは各区間に値を付けられる。
{[1,3]->1} に [2,4]->1 を追加すると {[1,2)->1,[2,3]->2,(3,4]->1}になる、多分。
boost::wregex r(L"(.)"); boost::wsmatch m; wstring s = L"ほげ"; boost::regex_search(s, m, r); これで、 sub_match.hpp(429) : error C2679: 二項演算子 '<<' : 型 'std::basic_string<_Elem,_Traits,_Ax>' の 右オペランドを扱う演算子が見つかりません (または変換できません)。 とかいうエラーがでるんですがなんなんでしょう?
>>353 boost_145@MSVC2010
エラー無し
boostのバグじゃね?
あいつらワイド文字気分で作って大してテストもしてねぇから
vs2010ならstd::wregexの方使ってみればいいよ
356 :
デフォルトの名無しさん :2011/02/28(月) 16:34:27.96
質問です。
以下ページにあるC++0x用LINQメソッドを
http://smellegantcode.wordpress.com/2009/01/26/linq-to-c0x/ 使用した結果をBOOST_FOREACHに入れて回そうとしたのですが、
コンパイルエラーとなってしまいます。
std::vector<int> array = { 1, 2, 3, 4, 5 };
auto result = from(array).where([] (const int & n) { return (n % 2) == 0; });
auto itr = result.begin(); // 通る
BOOST_FOREACH (auto n, result) { } // コンパイルエラー
http://ideone.com/Iu133 (boostの環境が作れなかったのでソース閲覧用に)
iteratorのBOOST_FOREACHに対する要件が足りていないのかと思い、
iterator_adaptorやiterator_facadeを
const_iteratorに継承させたりしてみたのですが、
私がこれらをあまり理解出来ていないこともあってか
最終的にコンパイルエラーを取り除くことが出来ませんでした。
(あとtypedef const_iterator iterator;も追加してみました)
どなたか解決のヒントをいただけませんでしょうか?
エラーメッセージ書かない時点で 答えてもらう気ないだろ
boost使用時のコンパイラエラーメッセージって役に立つか? 立たないことは無いけど、異様に長いし、エラーをピンポイントで指摘してないし。 結局、行番号を頼りに修正することが多い。
361 :
356 :2011/03/01(火) 10:40:42.97
プロジェクトパス\project\boost_1_45_0/boost/mpl/eval_if.hpp: In instantiation of 'boost::mpl::eval_if<mpl_::bool_<false>, boost::range_const_iterator<filter<int, int, filter<int, int, __gnu_cxx::__normal_iterator<const int*, std::vector<int> >, pass_thru<int>, always_true<int> >::const_iterator, pass_thru<int>, main()::<lambda(const int&)> > >, boost::range_mutable_iterator<filter<int, int, filter<int, int, __gnu_cxx::__normal_iterator<const int*, std::vector<int> >, pass_thru<int>, always_true<int> >::const_iterator, pass_thru<int>, main()::<lambda(const int&)> > > >': プロジェクトパス\project\boost_1_45_0/boost/foreach.hpp:355:13: instantiated from 'boost::foreach_detail_::foreach_iterator<filter<int, int, filter<int, int, __gnu_cxx::__normal_iterator<const int*, std::vector<int> >, pass_thru<int>, always_true<int> >::const_iterator, pass_thru<int>, main()::<lambda(const int&)> >, mpl_::bool_<false> >' プロジェクトパス\project\linq.cpp:150:2: instantiated from here プロジェクトパス\project\boost_1_45_0/boost/mpl/eval_if.hpp:38:31: error: no type named 'type' in 'struct boost::mpl::eval_if<mpl_::bool_<false>, boost::range_const_iterator<filter<int, int, filter<int, int, __gnu_cxx::__normal_iterator<const int*, std::vector<int> >, pass_thru<int>, always_true<int> >::const_iterator, pass_thru<int>, main()::<lambda(const int&)> > >, boost::range_mutable_iterator<filter<int, int, filter<int, int, __gnu_cxx::__normal_iterator<const int*, std::vector<int> >, pass_thru<int>, always_true<int> >::const_iterator, pass_thru<int>, main()::<lambda(const int&)> > > >::f_'
362 :
356 :2011/03/01(火) 11:12:03.69
失礼しました。上記のがideoneのソースそのままでのコンパイルエラーです。 イテレータの解釈辺りでtypeのtypedefが無いということのようなので、 イテレータがforeachの走査対象に足る要件を満たしていないのかなと判断しました。 iterator_adaptors系を使えば良い感じに揃えてくれるのかな?と思ったのですが、 それらを用いるコードが私の理解ではきちんと書けていない状況です。
364 :
デフォルトの名無しさん :2011/03/01(火) 17:18:11.86
Boost.Rangeを使ってみているのですが、 STLコンテナのinsert等にrangeを渡したりは出来ないんでしょうか? begin/endを呼ぶためだけに変数に格納するのが何かおかしく感じます。
>362 >イテレータの解釈辺りでtypeのtypedefが無いということのようなので、 >イテレータがforeachの走査対象に足る要件を満たしていないのかなと判断しました。 多分違う。エラーが出てるのは mpl::eval_if のところなのでここでエラーの出てる type は mpl のメタ関数としての type だ。 あとエラーの出てる行は古いコンパイラ用の workaround のところで VC++ .NET 2002 以前を使ってる場合に 当たるんだけど C++0x 向けでラムダ式とか使ってるみたいだしなんかどっかおかしそう。
367 :
356 :2011/03/02(水) 03:39:10.88
>>365 なるほと・・、私の見当違いだったんですね。
マクロシンボルでの分岐をトレースして原因を調べてみたいと思います。
おかげで一歩前へ進めます。どうもありがとうございました。
368 :
364 :2011/03/02(水) 04:08:56.10
>>366 おぉぉありがとうございます!
これでbegin/endのタイプ量が激減してソース横幅も縮みそうです。
やはりきちんと用意されているものなのですね。
ただメンバ関数とは書く順番が変わってしまうのですか・・
黒魔術的な何かで何とかされているかと思っていたので少し残念です。
C++にも拡張メソッドが欲しくなりますね。
どうも1.46.1が出るっぽい なんぞ不具合でもあったのかしら
>>356 そこのconst_iteratorをstd::iterator<std::input_iterator_tag, TElemTo const>から派生させたら、
BOOST_FOREACH (auto n, boost::make_iterator_range(result.begin(), result.end()))
がコンパイル通るようになった。
boost/regexで マッチする部分をすべて取り出すことって出来ます? boost::regex r("a[^a]+b"); boost:smatch m; string s = "ahb anb atb"; ならahb anb atbそれぞれを取り出したいのですが。
std::string::const_itarator itbegin = s.cbegin(); std::string::const_itarator itend = s.cend(); while (std::regex_search(itbegin, itend, r, m) { itbegin = m[0].second; }
以前に VisualStudio の環境でダウンロードしただけで動くものをまとめてファイルにアップしてた人がいたけど 誰かurl知りませんか? 便利なのにテンプレに載ってないのはなんでです?
前と違って、今は公式でVisualStudio用のバイナリが配付されてるじゃん そういえばどっかの企業もバイナリ配布してたけどやめちゃったな
>>374 ,375
それsvnの野良ビルドだよね確か。
svn最新なので万人向けじゃないし、svn追っかける人なら自分でビルドするし、特に需要がなかったんじゃない?
あと更新される度にスパムのようにURL貼ってたのでウザがられてた。
テンプレ申請なりサイトでRSS配信なりすればよかったのにね。
bjamでビルド簡単になったんだからboostぐらいビルドしようぜ・・・ boost使う=開発環境あるわけだし。 ビルドに時間掛かるのは別w
Windowsは知らないけどLinuxでBoostビルドすると風呂入って一眠りしてコーヒー飲むぐらい時間かかるんだけど・・・
>>379 それってPCの性能じゃなくてOSの差なんですか?
>>379 出涸らし風味な話題だけれど・・・
C2Q 6550/RAM 4GB/XP SP3(x86)/7200rpm HDDの環境で時間は忘れたけど結構掛かったな。
あまりの遅さにSSD買ってVSとboostのソースを置いてビルドしたら爆速で終わった。
仕事なら時間単価で計算すると1ヶ月ぐらいで元取れるしなw
うちの場合wave, mpi, serialization, program_options辺りいらないのでビルドから外す。
CPU性能ももちろん大事だけど、ストレージのランダムアクセス性能が一番影響しそうだね 数GB読み書きするでしょ
その用途ならSSDよりメモリ馬鹿積みでRAMDISKの方がよさそう
debugはビルドしてない
386 :
379 :2011/03/04(金) 16:00:59.64
俺の環境がシングルコアでへぼいというのは百も承知だが ・静的ライブラリ ・静的ライブラリ(デバッグ情報付き) ・静的ライブラリ(STLportのデバッグモードを使ったデバッグ情報付き) ・動的ライブラリ ・動的ライブラリ(デバッグ情報付き) ・動的ライブラリ(STLportのデバッグモードを使ったデバッグ情報付き) を全部のライブラリに噛ましてやると俺のマシンは悲鳴を上げるんだぜ 情けないよな
要らない情報だよねそれ
>>387 つ[strip --strip-all]
こうしてゴミレスがまたひとつ
これが後世に残るゴミレススパイラルの始まりであった
-jxオプションを付けてやると並列ビルドされるのでかなり高速化されるよ 並列数はCPUのコア数とクロックに応じて程々に 例:8並列の場合 bjam -j8 (以下いつものオプション色々)
使うライブラリだけビルドすればいいだろ
やりかた知らないんだと思うよ
そうやって「俺がいらないものはいらない」で排除ばっかしてるから ゴミレスしか残らなくなるんだろ
とはいえいきなり自分の手際の悪さを晒されましても ゴミレス以外にどうリアクションをとればいいのやら
並列ビルドしちゃいけないわけじゃあるまいに
398 :
デフォルトの名無しさん :2011/03/05(土) 09:06:33.90
セキュリティソフトのリアルタイム検索切ってみるとか?
ゴミレスしかねぇ
>>396 馬鹿だなお前w
ゴミレスしなきゃいいじゃん
まさにゴミレース
ここ数年でこのスレの質が落ちまくってる
twitterみたいなサービス使ってると、2chはログ検索でしか使わなくなる人が多いのでは。
やっぱりTwitterの影響は大きいのかな。
boostのrandomで0以上1未満じゃなくて、 0より大きく1未満の乱数を作れませんか?
0が出たときだけもう一回まわせば良いんでね?
数式クラスとかってありませんか R言語並とはいいませんが、式の評価とか代入とか微積分とかあれば
boost::python で sci.py 呼ぶ
boost.pythonからrpyでR呼ぶ
ウェブブラウザがjavascriptでなくてc++を直に実行してくれるの出るみたいだけど boostも使えるのかな
boost.FC++ って開発停止なの?
boost protoで無限数列作るの無理なの?
416 :
デフォルトの名無しさん :2011/03/13(日) 06:29:13.40
Macでboost扱う場合ってVisualStudioに相当するものないの?
XCodeってのがそうなんじゃないの
419 :
福盛俊明 :2011/03/23(水) 23:52:34.77
アハ〜♪”
420 :
デフォルトの名無しさん :2011/03/28(月) 12:47:40.42
xcodeは糞だってじっちゃがいってた
>>820 は?
お前ちょっとおかしいんじゃねーの?
そんな事言ったら、男はスカート履いたり口紅塗ったりしたら
いけないってこと???
どこの誤爆だよ
いいけど近くに寄るな
すごい美人になるなら、許す。
死んでないぞ?
500 Internal Server Error
| ̄:/ : : /: : : : : : : :i: : : i: :\ : :\ \ |: / : : : / : : : : :.i: : : : |: : : :|: : : |: : : i ' : :|: : : : |: : i: : : :|: : : /i|: : :|:| : : :|: : : | | : :|: : : : |: :.|:斗 十‐/ i|: :∧-‐ト|: : : | | : :|: : : : |イ|: :|:/ |:/ |:/ |ハ: : |: : : | \_,ノ : :|: : : : | レヤ示ト rテv|:./|: : : :| ヽ|: : : : |/{:::::::i } トイ レ: :|/|/ 関東地方 ( |: : : : 代c::ノソ レリ |: : : : | 東北地方 北海道地方 .〈.|: : : : |x`¨ 、¨x.|: : : i:| にいる \|i: : : :| , /|: : : i:| すべての 愛すべき 国民へ 告ぐ ∨リ\: :iト 、 `´ ィ |: : /|リ ‐┴―\|- 〈 >rァ 爪|V |/ :::::::::::::::::::::::ヽ \ リ ::::::::::::::::::::::::__\ :::::::::::::::/ ::r――‐へ rっr‐-、_ :::::::::/ ::// ∧. | ̄ ̄ ̄| | | | | ̄ ̄ ̄ ̄ ̄ ̄ ̄|.. :::/ ::/ / ヽ|. L|_|_ト' | / ::::/ / \ ただちに 逃げろ | . :::/ |/ | |
今boostを利用してシリアライズをしようと思っているのですが #include <boost/serialization/vector.hpp> #include <boost/serialization/deque.hpp> などをインクルードしようとすると >LINK : fatal error LNK1104: ファイル 'libboost_serialization-vc100-mt-gd-1_46_1.lib' を開くことができません。 というエラーが出てしまうのです。他の #include <boost/serialization/serialization.hpp> #include <boost/serialization/string.hpp> は問題なく通るのですが・・・いったい何が原因でしょうか?
事前にboostビルドしておけよ
VC++ならビルド済みboostライブラリが自動インストールできると書かれていたのでそれを利用したのですが・・・
libboost_serialization-vc100-mt-gd-1_46_1.libが存在する見てこい なかったら自分でビルドしろ
libboost_serialization-vc100-mt-gd-1_46_1.libはlibフォルダにちゃんと存在するようです
パス通ってないだけじゃねーか
VC++のインクルードファイルにC:\Program Files\boost\boost_1_46_1を設定するだけではだめなのでしょうか?
インクルードパスだけじゃなくてライブラリファイルも指定しろ ライブラリパスの方は~.libが置いてるフォルダな
インクルードパス通ってないのになんでインクルード出来てないんだ? それともインクルードパスは通したがライブラリパスは通し忘れた or 存在を知らないってやつか?
ライブラリディレクトリにlibが入っているファイルを追加しましたがエラーが消えないですね・・・
libが入っている「フォルダ」を指定してみて
失礼、ファイルとフォルダを間違えてしまいました おお、上手くいきました!ありがとうございました なんか「std::streamsize' から 'size_t' への変換です。データが失われる可能性があります。」 みたいな警告が出てますけどこれは仕様なんですかね
あ、これはboost/archive/binary_oarchive.hppの警告だったようです。申し訳ない
書き忘れましたが、そのスレッドで指摘されているBOOST_PP_EQUALに数値を入れても解決されません。 コンパイラはVS2008を使っています
すみません。 #include <boost/preprocessor/comparison/equal.hpp> をしたら自己解決しました。
すみません serializeの侵入型 非侵入型って英語でなんて言いますか?
intrusive/non-intrusive
ありがとうございます!
iphoneで動かないのなんてありました? mm経由でなんでも使えるっぽいですが
BOOST_AUTO(xx , boost::fusion::list<double,int,double>(1.12, 3 ,3.4) ); エラーになる だめなのかな
fusion便利だね CG関連のライブラリでしか使ってるのみたことないけど accumulaterも使ってるの?
>>452 accumulators は知らんけど Spirit がばりばり使ってる。
accumulatorに静的に代入した値って コンパイルタイムで計算される?
void funcRef(shared_ptr<Hoge>& ref = shared_ptr<Hoge>()) {} デフォルト引数をヌルポインタにしたい場合、これって問題ないですか?
const shared_ptr<Hoge>& ref = shared_ptr<Hoge>()
なんでconst要るのー?
>>459 funcRef() の中でデフォルト指定された ref に値を設定することには意味が無いから、
そういうコードは書けないように言語のルールとして定められているのです。
boost.pythonを使いたいのですがセットアップ法が分かりません 環境はWindowsとGCCです bootstrap.batを実行して、project-config.jamの内容を using gcc : 4.6.0 ; using python : 3.2 ; libraries = --with-python ; と変更してbjamを実行しましたが何かエラー(failing)が出てstage\libに何も生成されません どなたか教えてください
462 :
461 :2011/05/02(月) 03:10:54.93
二箇所あるエラー内容は次のようになっています gcc.compile.c++ bin.v2\libs\python\build\gcc-mingw-4.6.0\release\link-static\threading-multi\converter\builtin_converters.o libs\python\src\converter\builtin_converters.cpp: In static member function 'static std::wstring boost::python::converter::{anonymous}::wstring_rvalue_from_python::extract(PyObject*)': libs\python\src\converter\builtin_converters.cpp:436:32: error: cannot convert 'PyUnicodeObject*' to 'PyObject*' for argument '1' to 'Py_ssize_t PyUnicodeUCS2_AsWideChar(PyObject*, wchar_t*, Py_ssize_t)' gcc.compile.c++ bin.v2\libs\python\build\gcc-mingw-4.6.0\debug\link-static\threading-multi\converter\builtin_converters.o libs\python\src\converter\builtin_converters.cpp: In static member function 'static std::wstring boost::python::converter::{anonymous}::wstring_rvalue_from_python::extract(PyObject*)': libs\python\src\converter\builtin_converters.cpp:436:32: error: cannot convert 'PyUnicodeObject*' to 'PyObject*' for argument '1' to 'Py_ssize_t PyUnicodeUCS2_AsWideChar(PyObject*, wchar_t*, Py_ssize_t)'
Adobe って Boost使ってたんだな 俺も勉強しようかな
他の人と同じ道具使いたがる男の人って・・・
協調性高そうでいいよね
466 :
デフォルトの名無しさん :2011/05/06(金) 16:19:08.01
ワロタ
Boostってなんで オブジェクト.メンバ関数() じゃなくて 関数(オブジェクト)型が多いの?
性的に解決できるようにじゃない
性的にねえ
オブジェクトが対応するメンバ関数を持っていなくても フリー関数ならメンバ関数がなくても「デフォルト実装」にフォールバックできる。 後から専用の処理を追加・削除しても呼び出し側はソースを編集しなくてもいい。 引数の暗黙の変換を利用することもできる。 組み込み型に対しても同じ書式を適用できる。 と色々メリットがある。
public操作だけで済むなら、カプセル化の観点からも 性的外出しユーティリティが良いってメイヤーズおじちゃんがゆってた
あり^^
フリー関数でもfriend使えばprivateメンバにアクセスできるしね。 実はメンバ関数は要らない子のような気がしてきた。
ハーブ・サッターも非メンバ関数を勧めてるな
メンバ関数ちゃんを仲間外れのするのはやめろよー
プログラミング言語C++第3版でも、メンバ関数はできる限り privateにすべし、って話があるな
もはやなんのためのOOPかわからんな
構造化のために決まってんだろ
メソッドを全部privateにしたらどこからアクセスするん?
>>479 インターフェースはprivateにしないとおもうけどなあ。
>>477 継承はOOPの本質じゃないんじゃないかな?
ポリモがどうしても必要なとき意外使うなって事だと思うんだけど。
こんにちわ。
質問していいですか?
>>24 で書いてあるような、
「この機能を使うためにはこのライブラリをリンクする必要があるよ。」
みたいな情報ってどこに書いてありますか?
公式のThreadのドキュメントみてもそれっぽいの無かったですよ。
俺は英文で見かけたよ。どこだか忘れたが。 dll名でググってみれば?
Boost1.46.1ちゃんのRegexをSTLPortでBuild(Linux)するとエラー吐いちゃうけどどうしたらいいの?
>>482 個人で運営なさっている解説サイトとか、メーリング
リスト等には書いてあるんですけど、もう少しオフィ
シャルな情報が欲しいじゃ無いですか。
そう考えて公式サイトを読んでいたんですけど、私の
拙い英語力と集中力じゃさっぱりでした。
Getting Started の Library Naming 書いてあるだろう
>>485 ありました!有り難うございます!「6.3 Library Naming」にありましたよ!!
Getting Startの最初のページの右下のNext:の部分を見逃してました。
命名規約からライブラリのファイル名を導き出してたんですね。
jamfaileのコメントとかを必死に翻訳していた自分が情けないです。
有難うございました。
Boost Graphに巡回セールスマン問題を解ける アルゴリズムがあったら名前を教えて欲しい
>487 近似解で良ければ metric_tsp_approx
490 :
デフォルトの名無しさん :2011/05/20(金) 06:15:31.08
>>480 〉継承はOOPの本質じゃないんじゃないかな?
:(;゙゚'ω゚'):マジで……?
で、C++でクラスベースなBoostだと何がどうだと?
>>490 480ではないが、継承がやってることといえば
polymorphismの実装
基底のコードの流用
だけだからな
これらがそれぞれ別の手段で実現できれば継承はなくてもいいと思う
と俺が思ってるだけで一般的には継承はOOPの重要な要素だけどね
データとアルゴリズムの論理的結合があればOOPと言える。 「動的な」結合が必要かどうかは言語によるのではないかと思う。
そうだよなー。 それぞれアトミックな概念かもよく分からずに、仮想関数は静的に型付けされた動的束縛だから、仮想関数や抽象(インターフェース)クラスはC++のOOPの本質のひとつじゃね?って感じで深みにハマって結局訳わかめになる。
Data + Algorithm = Programと言えばニクラウス・ヴィルトだが、要はオブジェクトとは データとアルゴリズムのまとまった単位、即ち一つの完結した部分プログラムであって、 それの寄せ集めが全体としてのプログラムであるという観点および方法論のことを オブジェクト指向と呼んでいるのだと思う。 それとは別にストラウストラップがカプセル化・継承・多態性をC++言語による オブジェクト指向サポートの基本要素としたのは一つレイヤーの上がる話だ。 // ちょっとBoostとは関係ない話になったが
複数人で開発するようになると、 継承はコードが読みづらくなるから避けてほしい。
IF継承は別ね。
クラス構成が仕様で決まってないってことか 問題はむしろそっちだな
boostのtrunk面白いなぁ bjamに--without-mpi付けてたのにmpiのライブラリできた
もしかして:Jamfileのバグ
shared_ptrつかいまくりのプログラムで問題が無いか調べるにはどうしたらいいですか? プログラム終了時に例外とメモリリークでなければOK?
終了時に全部開放されてるか調べる。 終了順に依存関係があるものは設計で対応してあるか確認する。 こんなもんじゃね。楽するためのものだから、判ってて使ってるなら気にしなくていいとおもうが。 心配なら、全部resetしたらw
boost::shared_ptrのデリーターを一旦取り出して開放時の処理を追加してまた元に戻す、みたいな事したいんだけど出来ますか? shared_ptr<Hoge> hoge; HogeRegistry hogeReg; hogeReg.insert(hoge.get()); // ライブラリの都合上生ポインタしか登録できない。ので、ここでhogeのデリーターに新たにhogeReg.erase(hoge.get())に相当する処理を追加したい
HogeRegistoryをラップするクラス作った方がいいんじゃないか?
そんなコンテナ捨てちまえ
っ template<class Y, class D> shared_ptr(Y * p, D d); Effects: Constructs a shared_ptr that owns the pointer p and the deleter d.
>>509 なるほど、別のスマポを作ってしまうというのは盲点でした
盲点て shared_ptr捨てるとかないわ
シェアポ
vector<any> の中身を順番にostreamに突っ込みたいんですが, 組み込み型ならある程度typeごとに条件わけで書けるのはわかるんですが, ユーザー定義型の場合はどうやって動的にany_castしたら良いんでしょう?? placeholderのtype()に合うように自動的にcastってできるんでしょうか. 初心者ですいませんorz
>>513 作ったクラスに<<をオーバーロードすればいいじゃない
>>514 初級者なのでよくわかっていないのですが,
class A; vector<any> b; b.push_back( A() );
みたいにしたあと,any_cast<A>を正しくするにはどうしたらいいのか…
せめてfor_each( any &a in b ) cout << any_cast< a.type() >(a);
みたいな事ができるといいのですが…
516 :
513 :2011/06/09(木) 22:21:11.39
動的にany_castする方法はわからなかったですが, やりたいこと自体は基底にオペレータを定義して, あとは多態性で解決できました. できてみれば簡単でした…なんで思いつかなかったんだろう... ありがとうございました.
>513 静的な解決はできないから動的なマルチディスパッチしかない。 多態で済むんだったら、普通に基底ポインタで保持したら?
518 :
513 :2011/06/10(金) 11:36:36.57
>> 517 静的にはムリなんですね.そりゃそうか... それで行きます!
property_treeのiniファイルパーサーですけど、セクションとキーの文字列を 大文字小文字の区別をつけないようにできないんでしょうか? APIのGetPrivateProfileString()は、大文字小文字の区別が無かったので すでにあるINIファイルをこれで読み込もうとすると、大文字だったり小文字 だったりするので、設定が見つからなかったりするんです。
>>519 basic_ptree の第 3 テンプレートパラメータで大文字小文字無視する比較を渡せばいいんじゃないかな。
同じことだけど ptree → iptree (wptree → wiptree)
property_treeもう手放せないんだけど、-O3でバイナリが 数100k膨れ上がるのは何とかならんのか
523 :
デフォルトの名無しさん :2011/06/14(火) 21:45:32.04
524 :
uy :2011/06/21(火) 07:11:35.99
素晴らしい言語だな・・・・・
525 :
uy :2011/06/21(火) 07:41:23.38
526 :
uy :2011/06/21(火) 15:51:38.99
ゴミみたいなスレだな・・・・
1.47期待hosyu
geometry楽しみ
>>528 なんも動きがないんだが大丈夫なのかアレ
新機能をブリーフィングして俺をワクワクさせろ
もうちょっとコンパイル早くしてくれませんか?
TMP使うソースのコンパイルは 指示する度にうんこしてこれる
Boost.CompilationFirewall
マルチコアCPU使ってる場合はコンパイラオプションに/MP付ければ多少速くなるよ
boostにマルチスレッド対応コンテナってある?
lockfreeコンテナのことなら今レビュー中だったかな?
537 :
デフォルトの名無しさん :2011/07/12(火) 17:23:37.47
<boost/archive/binary_iarchive.hpp>を使用すると警告が出てくるのですがこれはどうにもならないのでしょうか インクルードしているだけで出てくるのでコードが悪いわけではなさそうですが・・・
警告なら非表示にすればいいだろ
んー、そうなんですけど利用したらなんかバグとか出そうで心配なのですが・・・ データが失われる可能性とか出てるので
そんな餌に俺はつられんぞ
いやいや、まじめに
とりあえず、どんな警告が出てくるか位ははろうぜ
>>544 std::streamsizeってstd::size_tのtypedefだったと思うけどどうしてそれに対する警告が出てるの?
さぁ・・・自分ではなんとも boostの中を見てもさっぱり
どうやら1.47でも出るみたいですね ・・・しかし英語ができなくて報告の仕方がわからない
う〜BOOST_FOREACHって意外と遅かったのねぇ、便利だから使い過ぎてしまったよ 書き直しorz
問題になるほど遅い印象はないけどな
>>594 何年も前の話だけど、BOOST_FOREACH のコンパイルされたアセンブラコードを見て、
あまりのひどいコードに愕然としたことがあったよ。
以来使っていない。
foreachならopenmpやtbbにもあったと思うのでそっち使ってみてはどう?
そんなんあったっけ? 見当たらぬ・・・
xpressive_static.hppをプリコンパイルに入れただけでpchが40MB以上膨らんだでござる
boostの中の人って頭いいのにアホなのかな あの技術と熱意を新低級言語開発に回してたらいまごろとっくにもっと便利なもんできてただろ
D言語の二の舞になるだけだろ
言語の核の部分は人数多くてもしょうがない。 重要なのは汎用性と一貫性で、技術と熱意は邪魔なだけ。 低級言語ならForth最強だろ。
ジェネリックな低級llvm言語、その名はclay
property_treeのini_parserなんですが、XP以降だと問題ないのですが Win2kだと正しくiniファイルが読み込めないのですが、対応してないって ことでしょうか?
どんなふうにできないのか?
Boost::pythonの質問はココで良いですか?
>>561 Win2kのPCにVSが入ってないんで、まだ詳しく見れてません。
ただ、現象的には、
・セクションが見つからない
・キーが見つからない
・イコール(=)の後に文字列がない
のいずれかですね。
この場合は、デフォルト文字列になるようにしてるんですが、
読み出そうとしている文字列がすべてデフォルトになっちゃってるんで。
>>560 自己レスです。
Win2kの問題では無く、ファイルのパス名に日本語を含んでいるためでした。
read_iniで直接ファイル名を指定せずに、ifstreamで開いてからそのストリームを
read_iniに指定することにしました。
>>556 boostより便利なものってなんだよw
いい加減boost.GUIを作れよ
568 :
デフォルトの名無しさん :2011/07/24(日) 01:16:39.11
>>566 やってみろ
そして、どこが「boost」なのか説明してくれ
>>567 そのうちC++でboost使うほうが楽になるよ。
GUIはどうすんの
wxWidgets
wxWidgets って Boost 版あったっけ
っていうかwxWidgets使ってるとBoostいらねって思うわw
c++0xのlambdaと同じ様なものは boost組み合わせてできないものでしょうか _1 じゃなくて x とか変数に使いたい
shared_ptrってマクロでマルチスレッドをONOFFできるけど ONのshared_ptrとOFFのshared_ptrを共存させるのってアリなの?
>>574 _1 の別名として使えればいいだけなら
boost::lambda::placeholder1_type X;
とすれば X が _1 と同じように使える。
Boost Phoenix で似たようなことしつつ let 使った方がもう少し望みに近くなるかもしれない。
BOOST_CHRONO_HEADER_ONLY マクロ有効にしても.libリンクしろって怒られます date_timeとかは普通にヘッダオンリで使えてるんですけど、Chronoの場合なんか他に必要なんですか?
自己解決しました BOOST_SYSTEM_NO_LIB と BOOST_ERROR_CODE_HEADER_ONLY も有効にしたらできました・・・ もっと調べてから聞くべきだった
c++0x確定でboostもいろいろ影響うけるかな
復帰
matlabとか他の計算結果を全部ublasの形式に合わせて出力してるんだが 単純に数値並べただけの方が便利だったりするのかな
>>583 その計算結果の用途によるとしか……
ublasへの入力が多いならそれでいいんじゃね?
もっと背景を書いてくれないと答えようがないな
boostでシリアライズしてたんだけどエラーがどうしても消えなかったんだ それでいろいろやってたら出なくなったんだがその内容が friend class boost::serialization::access; template<class Archive> void serialize( Archive& ar, unsigned int ver ) { ar & string型; ar & string; ar & int; ar & int; ar & int; ar & int; } の並びを ar & int; ar & string型; ar & int; ar & string; ar & int; ar & int; にしたらエラーが出なくなった。原因は何なんだろう
589 :
デフォルトの名無しさん :2011/09/01(木) 21:32:00.35
boost::property_tree で要素の削除ってどうやってするんでしょうか? たぶんeraseだとは思うんですがうまくいきません。
http://www.kmonos.net/alang/boost/classes/asio.html をみてasioでwebサイトからデータを取得しています
ip::tcp::iostream s( "www.boost.org", "http" );
によって作られたsはs << flush;を実行した時点で通信が開始されていると思いますが
while( getline(s, line) ) cout << line << endl;
によってデータを受信した後sを再利用するとこはできませんか?
質問するところが間違っていたらすいません
boost:threadに関する質問です スレッドを作って内部で勝手に処理させるクラスを作っています class test { boost::thread thr; void start(){ thr = boost::thread(func); } void stop(); } のようにして生成したスレッドのコピーをメンバ変数に保存してい置くのはまずいでしょうか 一応boost::thread(func)がスコープを外れて破棄されても動作するようですがどうなのでしょうか
>>591 別にまずくはない。
boost::threadのデストラクタはdetach()を呼び出す。つまり、threadオブジェクトと
スレッドの寿命は同期していないし、スレッドが終わるまで待ってくれたりもしない。
同期させたければthreadオブジェクトを破棄する前にスレッド関数を抜けるように
フラグやcondition_variable等で指示しておき、(thread::join()等で)スレッドが終了した事を確認してから、
threadを破棄する必要がある。
>>589 自己レスです。
実際には、iniファイルの読み書きで使ってるんですが、
セクションごと消すのは出来るんですが、その中のあるキー設定を
消すと、write_ini()で例外が発生してしまいます。
だれかご存じないでしょうか?
>>593 さらに自己レス。
[Section]
Key1=1234
Key2=9876
と有ったときにKey2は消せるんですが、Key1を消すと、write_ini()パーサーで
例外が発生します。
これって、write_ini()のバグ?
>>594 またまた自己レスです。
どうも、erase()またはwrite_???()がバグっているように思える。
iniパーサーでなくて、xmlやjsonパーサーでもerase()してwriteすると
おかしくなる。erase()したあと、ptreeをたどるとeraseしなかった要素は
残っているようなので、write_???()がくさい。
コード書けや
>>595 やっぱerase()がおかしい。earse()したあと別のptreeにコピーすると
異常が出てしまう。(clone()ルーチンで)
erase()は使えないなぁ。
これ、ptreeってmulti_index_containerですよね。そっちもバグってるってことか?
>596 ptree pt; read_ini("hoge.ini", pt); ptree& n1 = pt.get_child("Section"); ptree::assoc_iterator it = n1.find("Key1"); if (it != n1.not_found()) { write_ini("hoge.ini", pt); } <hoge.ini> #================= [Section] Key1=1234 Key2=ABCDE #=================
>>598 すまん。肝心のerase()が抜けてたorz
ptree pt;
read_ini("hoge.ini", pt);
ptree& n1 = pt.get_child("Section");
ptree::assoc_iterator it = n1.find("Key1");
if (it != n1.not_found()) {
pt.erase(n1.to_iterator(it));
write_ini("hoge.ini", pt);
}
<hoge.ini>
#=================
[Section]
Key1=1234
Key2=ABCDE
#=================
このコードでどうだろうか ptree pt; read_ini("hoge.ini", pt); ptree::assoc_iterator it = pt.find("Section"); if (it != pt.not_found()) { it->second.erase("Key1"); write_ini(std::cout, pt); }
>>600 おお!うまくいきました!
ありがとうございました。
なるほど、最下層の要素を削除するときはこうしないといけないんですね。
boostにも削除のサンプルを入れて欲しいな〜。
常識だから入れなかったんじゃない?
結局、キーの方も find()で探して、もしあれば、そのイテレータを使って ptree::assoc_iterator it2 = it->second.find("Key1"); if (it2 != it->second.not_found()) { it->second.erase(it->second.to_iterator(it2)); } として消すようにしました。 まあ、例外で受けていいのですが他の処理もあるので。
604 :
デフォルトの名無しさん :2011/09/06(火) 11:49:02.47
リンクエラーが出て先に進めないのでご存知の方がいたら教えて下さい。
環境 Visual C++ 2008
boost Ver.1_46_0
C:\>cl /EHsc test.cpp
とコンパイルしたら
LINK : fatal error LNK1104: ファイル 'libboost_thread-vc90-mt-s-1_46.lib' を開くことができません。
と出力されました。
また、以下のサイトでlibboost_thread-vc90-mt-s-1_46.libらしきファイルをDLできたので、
\boost_1_46_0\stage\lib配下にコピーしましたが結果同じでした。
http://hg.splayer.org/splayer/src/3fe3f0a75e68/lib/boost/ ソースファイルは以下のようなファイルです。
#include <iostream>
#include <boost/thread.hpp>
using namespace std;
using namespace boost;
void func(){
}
void main(){
thread threadA(func);
threadA.join();
}
ご教授お願いします。 m(__)m
突っ込んだ所で追加のライブラリ ディレクトリに入ってなきゃダメだろ
607 :
604 :2011/09/06(火) 14:27:03.46
>>605 >>606 ありがとうございます m(__)m
自動インストーラでboost_1_47を再インストールしたあと、
vsvars32.batに
@set LIB="C:\boost_1_47\lib";C:\Program Files\Microsoft Visual Studio 9.0\VC\LIB;%LIB%
も追加したらリンク通るようになりました。
フェニックスがFC++の後継だそうだけど いろんな意味で中途半端すぎないか それともこれから発展していくのだろうか
arrayって宣言時以外に入力するには1つずつ入れないとダメ? 面倒くさいんだけど
assignとかなかったっけ
おぉ、arrayにも使えたのか
VS2005使ってるのですがboostが正しくインストールされてるか簡単に確かめる方法ないですか?
memoizationをtemplate使って汎用に書いた関数ってなかったでしょうか
pstadeのmemoizedぐらいしかしらん
2chの過去ログみたら eggが誰もレビューされないでレジェクトだって? 公式の説明はどうなってるの 今ならレビューするのに
一度レビューに上ったこともあるんだぜ。 あまりにもレビュー数が少なかったので、落とされたが。
なんでドキュメント改良して再チャレンジって話にならなかったの?
本人が長いこと更新してないみたいだし 誰かが本人と連盟扱いでドキュメント更新したものを再チャレンジしたらダメなのかな?
VS2008ではワーニングが出なかったんだが、VS2010にすると C4503 装飾された名前の長さが限界を超えました っていっぱい出るんだが、どうすればワーニングが出ないようにできるんでしょうか? コンパイルそのものは、正常終了してます。
boost-coroutineはx84-64で動かないって本当ですか? 2010年にバージョンアップしたみたいですが x84-64で動かないってコメントみかけるのが2009年より前のものばかりなので ひょっとして改善したのかと
試してみてくれ 俺も気になる
そんな事より大変だよおまえら progress_displayさんがdeprecatedされるって
奇跡のような存在だったからな。
progress_displayさんはboostの癒しキャラ 技巧凝らしたソースばかり見ていたら疲れるだ
みんな反対してよ(´;ω;`)
progress_displayに 呼び出し元プロセスとの進捗状況をやりとりする機能を実装し そのプロトコルも規格化したりすると延命できるのかな。
progress_displayやprogress_timerの実装に使われてる大元のBoost.Timerの刷新のついでだからどうしようもないな
何でみんなそんなに冷静なのっ!?
来るべき時が来たって感じだから…
この際eggやovenをだな
レビューがBoostConと重なったためにまともに評価されなかったんだよね>egg どう考えてもovenの方がrangeexより優れてる筈なのに・・・どうしてああなった
|をパイプ処理に使う仕様とかはqtみたいな言語のサブセット的な巨大フレームワークを構築してその中に隔離しておいてくれ
oerator | の定義って斬新だな フェニックスも大概独自世界構築してるけど| の方がわかりやすくてええわ
俺はうげーってなるから止めて欲しい
シェルのパイプからの発想なんだろうけどC++で順序に意味のある結合に|を使うのは一般的になって欲しくない
同感
>>633 >eggやoven
boostライセンスだから
作者の許可なしで「改良したもの」をboostに提案しても問題ない予感がするのだが
もちろん作者の名前も入れる
・・・
返事が無い ただのdeprecatedのようだ
誰かが作ったのを別人が改良というのはよく見るから 改良したらいいんじゃないの?
progress_display って、なんだかんだでみんな一度は使うよね
boostの親善大使だから
そうだったのか。。 でも確かに、親善大使という言い方に、しっくりくるものを感じる。。。
まぁ初めてboost触る人にSpirit薦めるわけにはいかないしねぇ 俺はlexcal_castから入門したけど
誰もが一発でわかる最も簡単なboost noncopyableをよろしく
BOOST_FOREACHがいいんじゃないか
BGLから入った俺は変態ですか?
俺はshared_ptrとregex
俺はtokenizer
filesystemから入ったかなぁ
randomだったと思う。
和訳されてる書籍にあるライブラリしか使えん
scoped_arrayからかな・・・auto_ptrの配列版探していて知った ところでprogress_displayを実用した著名ソフトってあるのかしら
google code検索で検索してみよう
>>656 めっちゃ有名なライブラリで使ってるよ。
Boost C++ Libraries
一番最初につかったのが、progress_displayだわ まぁLet'sboostみながら一番わかりやすそうだったからってだけだが
意外にもformatが挙がらないな
私の後継に相応しい者はいないようだな これではまだまだ親善大使を退くわけにはいかんう・・・
早くprogress_display2.0を作る作業に戻るんだ
Boost.Timerv2に対応したprogress_displayです!!!1111 みたいにboost.develに投稿してまずはsandbox入りを目指そう
表示処理部分を差し替え可能にすればなんとか・・・
そしてboost.interprocessに吸収されるわけですね
bjamこそprogress_display使うべきじゃね?
filesystemのwpathってなんでdeprecatedなの?
ごめん自己解決 pathそのものが両方サポートしてるのね。
670 :
デフォルトの名無しさん :2011/10/25(火) 14:09:17.02
「boost::this_thread」っていう名前空間の「this」ってどんな意味なのでしょうか? どなたかご存知です?
このスレ
>親善大使 簡単にスレッドを使いたくて調べてたらboostにあたった。 boost::thread は非常に簡単でいい。 「boost::this_thread」っていう名前空間の「this」ってどんな意味なのでしょうか? どなたかご存知です?
>>670 "this"の意味は「この」。
"this_thread"で「このスレ」。
674 :
672 :2011/10/25(火) 19:21:41.47
>>620 あれ?2回も投稿してるし、しかもageてるよ。申し訳ない。
>>671 ,
>>673 ありがとうございます。
助かりました。
説明もらって、Webで見つけたサンプル達を眺めたら理解できました。
675 :
672 :2011/10/25(火) 20:36:08.22
連続で失礼!
どちらかというと、Boostというより、C++のクラスについての質問になります。
よろしくお願いします。
ttp://melpon.tank.jp/pukiwiki147/index.php?Memo%2F%CB%DD%CC%F5%2FBoost.Thread ↑この辺り( Boost.Thread )を読んで試したりしているのですけど、
boost::this_thread sleep() ※Static member function sleep()
boost::this_thread::sleep() ※Non-member function sleep()
の二つのsleepがあるじゃないですか。それぞれ、
指定した時間になるまで、現在のスレッドをサスペンドします
指定した時間が経過するまで、現在のスレッドをサスペンドします
と若干引数の扱いが違いますが、似ています。
threadクラスの中に入れたのと、外(this_thread)に入れたのとで、どのように使い分ければいいのですか?
「中断ポイント」として、利用されるのが前者、程度の違いでしょうか?
何か他に大事なことを知らない気がしています…。
676 :
672 :2011/10/25(火) 21:33:35.07
ミスった ×boost::this_thread sleep() ※Static member function sleep() ○boost::thread sleep() ※Static member function sleep()
property_treeのINIパーサーだけど、XMLパーサーみたいに書きこむときに コメントを再現できないんだろうか? 今は無視して読み飛ばしてるみたいだが。
コメントなんて読んでどうすんだ
boost::thread のスレッドが動いているか、それとも終了しているか、を自作の関数を用いないで確認する方法ってあります?
timed_join
681 :
679 :2011/10/31(月) 02:40:46.69
>>680 !!そうかっ!
感動した!
ありがとうございます。
既存のクラス namespace Hoge { struct Fuga // 独自にカウンタを持つ { int count ; int add_ref(void); int release(void); }; } があってintrusive_ptrを使いたいんだけどnamespace Xに追加禁止の場合は グローバルスコープにintrusive_ptr_add_refとintrusive_ptr_releaseを書くしか無い? なにかうまい回避策とかあるのかな
>>682 namespace に追加禁止の意味がわからん。
Xってどこだよ、おいといて、
>>682 でHogeの中に置けないならnamespace boostに置く
686 :
685 :2011/11/02(水) 07:33:33.34
あ、何か急にわかりました。 スレ汚し失礼しました。
687 :
685 :2011/11/02(水) 14:26:44.40
もう少しよく見ればthread::yield/sleepがthis_thread::yield/sleepを呼び出してるだけなのがわかっただろうになあ
689 :
679 :2011/11/05(土) 06:15:53.53
join()・timed_join()(成功)・detach()を複数回実行した時の動作は未定です? timed_join()を繰り返して、起動した全てのスレが終了したか検知するコードを書いて今はうまく動いているのですけど、 幾つかのスレが終了している最中に、もしも別のスレが起動したらどうなるのかな?デタッチした領域は開放されているから再利用される可能性があるかな?なんて考えて…。 それとも、スレの起動箇所ごとに、アタッチするメモリ番地が決まってるのかな。 そうすると、forやwhileで起動する際に説明がつかないし…。 未定か。
なに言ってるかわからないがたぶん心配してるようなことにはならないだろ。基本的なところを勘違いしてるように思える。
691 :
689 :2011/11/06(日) 22:23:39.49
>>690 レスありがとうです。
スレッド周りのヘッダとcppと読んでみたのですけど、あまりわかりませんでした。
スレッドが終了したかどうかって、Win32 APIとどのようにやり取りするのかわからないのがマズイ気がする。
先は長い…。
ところで、さっきと今との、経過時間をmillisecで取得したいのですけど、Boostを利用すると比較的容易な気がするのですが、どのクラスを利用すればいいでしょうか?
boost::posix_time付近で探しているところですが。
692 :
689 :2011/11/06(日) 22:34:54.18
ageてしまいました。すみません。 Win32APIでみつけることができました。GetTickCountで差分をとればいけそうでした。 もしBoostで、同じようなことが出来れば御教示ください。出来れば環境依存は少ない方がいいと思いますし。
boost::timer
chrono
いつもチンコ?って思っちまう
半年くらい前までは[スマポ]で検索するとスマートポインタのサイトがずらっと出てきたのに 今出てこなくなってるな こういう新しいものが出たときにもともとあった情報の取得の障害になることをなんていうんだろうね
産業革命
シャドウイング
オレオレ略語使いの憂鬱
スマポなんて初めて聞いたぞ
ナマポは生活保護か生ポインタか
むしろ誰も使ってなかったからグーグル先生の超推理でスマートポインタにヒットしてたんだろ。 いまは使われるようになったからな。
>>696 10年以上前の話だがCの関数をググれてたのが
PHPに占領されたときは殺意を覚えた
>>696 いまは「スマ」と打つとsmileageが出てくるように・・・まだなってないか
clangが規格に忠実すぎてBootのソースがコンパイルできん。
JOSN用モジュールってありますか?
>>705 コンパイルエラー晒せ。
直接バグレポートするともっといい。
>>706 JSON?
boost::property_tree
boost::property_treeを使ってXMLを読み込んでみるコードを書いてるのですけど、
hoge.piyo.fooの要素が複数存在する可能性がある仕様の時、何個あるかしらべるには、foreach使って全て読み込んでみないとわからないですか?
mapのsize()のような関数って無いでしょうか?
709 :
デフォルトの名無しさん :2011/11/16(水) 01:35:08.82
boost に gettext 相当のものってありますか?
>>710 ちょうどBoost.Localeが入ったぞ
フェニックスってコンパイルは遅くなるけど 実行時間はふつうにfor文かいたりするのと変わらないの?
Windowsでstd::locale("en_US.UTF-8")すると死ねますか?
たぶん無視されるだけかと
>>712 うん。gccレベルのコンパイラでも最適化オプションつけるとfor文展開と変わらない。
最適化しない場合は知らん。
717 :
デフォルトの名無しさん :2011/11/17(木) 14:52:45.35
1.48.0 released
Boost.Containerの詳しい解説たのむ 主にflatシリーズ
> 主にflatシリーズ ソート済みvector使った擬似setや擬似mapあるだろ。つまりそれ。
b2 ってのは bjam と同じなの? 1.47.0 から変わったみたいでコンパイルがよく分からなくなった それと、オプションの toolset は -- がいらなくなったの?
boost::interprocess::detailから boost::interprocess::ipcdetailに仕様が変わってるんだな コンパイルエラー吐かれて初めて気付いた
俺はbootstrap.shでtoolsetなどのオプションを指定して b2でコンパイルという感じでやってるけど、 b2をbjamと同じように使うこともできるみたいだね。
VC++2008でエラーになる・・・ boost.moveが原因くさい #include <boost/unordered_map.hpp> int main() { struct data_type { boost::unordered_map<int, int> a; }; data_type a; const data_type b; a = b; return 0; }
Why don't you write your version of boost.
>>724 boostの使用以前にエラー。
クラス型のconstオブジェクトを初期化子なしで初期化する(default-initialized)ときは
そのクラス型はユーザー定義のデフォルトコンストラクタを持っていなければならない。
property_treeのxml_parserでencodingをutf-8にして 文字列データに日本語を含ませるとunexpected end of dataという例外が飛んできます utf-8のxmlを読み込むにはどうすればいいんでしょうか?
data_type a; data_type b; a = static_cast<const data_type&>(b); でもエラーになるな。
729 :
727 :2011/11/18(金) 20:47:18.46
あ、ちなみに環境はwindows7でVC++EE2008 boostのバージョンは1.46.1です
>1.46.1です
moveエミュレーションってOFFにできないの?
>>726 は規格準拠の動作。VC++で出るべきエラーが出ないのはいつものことなのでお察しください
よくわからんけど
>>728 が通らないっていろいろ問題でないか?
std::mapに変えてcodepadで試したけどエラー出なかったぞ
>>726 はclangとかで試せばエラーになるだろうけど
とりあえずboostとは関係ないし軽く流せよ
738 :
デフォルトの名無しさん :2011/11/19(土) 16:22:22.43
へえ
Boost.Containerのパフォーマンスに期待
Visual C++向けのboostのlibのディレクトリを覗くと、 (1)boost〜.dll (2)boost〜.lib (3)libboost〜.lib ※:〜の部分は同じ という3種類のファイルがあるのですけど、それぞれ何なのですか? 何となく、(3)が静的リンクなライブラリの本体で、 (1)が動的リンクなライブラリの本体で、(2)が(1)向けのインポートライブラリかなぁなんて考えたのですが、 どうして静的と動的と両方あるのだろうか?と考えると、さっぱりわかりません。 boostって静的リンクじゃないのですか?
どこでダウンロードしたやつだ 公式じゃないよな?
実際スタティックリンクの方が速いな ダイナミックリンクはどうしてもコールゲートを通すのでリングレベルの移行など CPUで処理すべき仕事が多く相当速度が落ちる 速度とサイズのトレードオフか でもDLLやsoもメモリ内に読み込むのでサイズが小さいとも言えないし 同時に走らせるプログラムが多くなってきた時だけ違う
?
dllでコールゲート通らないし しかもリング変えるのにコールゲートとかいつの話だ
聞いたことある単語を適当に並べてみただけって感じの文だな
ダイナミックリンクでコールゲートを通すような処理系を教えてくれよ
リンク時の最適化が効かない以外はあんまかわらんかね
コールゲートが必要なのはカーネルだけだろ。 カーネルの場合は、ゲートとなるアドレスが記述されていて、 そこへ飛ぶとメモリー空間がユーザー空間からカーネル空間へ変わる。 通常のDLLは、ユーザー空間にコードマッピングして、関数テーブルを そこのアドレスに書き換えてるだけ。
助けてください >< boost::tupleのメンバ関数get<N>をboost::lambda::bindで束縛するにはどうしたらいいでしょう? 下記のコードでは、 error: invalid static_cast from type ‘<unresolved overloaded function type>’ to type ‘int (*)(const boost::tuples::tuple<int, int, boost::tuples::null_type, boost::tuples::null_type, .... と言われてしまいます。 get<N>のテンプレート周りかなと思うのですが。。 using namespace boost::lambda; int r; r = (bind( static_cast<int(*)(const boost::tuple<int,int>&)>( &boost::tuple<int,int>::get<0> ), _1) ) (boost::tuple<int,int>(1,1));
static_cast<const int&(boost::tuple<int,int>::*)()const>(&boost::tuple<int,int>::get<0>) メンバ関数がどんな型になるか勉強しなおしたほうがよさそう
>>753 ありがとうございます!
いろいろとカン違いしていました。
返り値型がconst int &というのも言われてみればなるほどで、
自分はまだまだ勉強が足りないですね。。
read_xmlでunicodeが読めないのですが仕様ですか? 引数にマルチバイト文字しか受け付けないし、 文字コード宣言があるXML文書のパースを ロケール指定して使うproperty_treeに依存するとかあほですか
yes
boost.spirit.qiでセマンティックアクションから、 一致したruleのrangeを示すiteratorが欲しいのですがclassicを使うしか方法はないのでしょうか? 例えば、以下の様にしたいです。 void action(Iter first, Iter last){ ... } //... (char_('(') >> *char_('0') >> char_(')'))[action];
ptreeはutf8一択と心に決めて使うものだし
tupleってfusionよりメリットある部分あるの?
機能が少ない分全貌を把握しやすくてとっつきやすい。 TMPに馴染みのない人がfusionの説明見たら引くでしょ。
そしてtupleのソースコードを読んで引く
俺なんかanyですらやや引きだぜ
any使えて嬉しいことって人生で一度でもあればいいほうだよね
>>753 オレオレ言語作るときに使えないか期待している。
しかし、まだ俺にそのスキルはない。。。
ヘッダをプリコンパイルヘッダーに突っ込んでも遅い。 みんなどうやってんの?
PCを買い替える
それどころかヘッダファイルをRAMDISK上に置いても遅い 極限までOCするとちょっと速くなる 結局並列ビルドが効く様な構成にしてその上でクロック周波数を極限まで上げるしかない 後はメモリアクセス速度とCPUのキャッシュ容量も効いてくるかもな
boostのヘッダー1個、boostを使うソース1個でも十分遅いからな。
64bitにする
770 :
デフォルトの名無しさん :2011/11/28(月) 09:48:46.81
多倍長整数型の一桁ずつをint型の配列に入れるために、 多倍長整数型をまずstringに代入し、一桁ずつの分割をして、それをboostでint型に変換してみようとしています。 つまり、charを使わないで 多倍長整数→string→string一桁ずつ→int の変換をしたいのです。 お尋ねしたいのが、string→string一桁ずつの変換をどのように行ったらいいのかということなんです。 もしわかる方がいらっしゃるなら教えていただけると嬉しいです。
771 :
770 :2011/11/28(月) 09:55:53.46
基数のべき乗で割ったあまり使えば?
>>772 言われてみればそうやれば簡単にできそうですね
OpenMPのような並列ライブラリってありますかね? 素直にboost::threadですかね・・・ boost Proの全自動インストーラーのほうが便利ですね 入れるなら
boost.fusionあたり使ってstd::vectorだろうが構造体だろうが かたっぱしからオブジェクトのメンバーをprintしてくれる debug関数みたいなのないですか
grep のことかな
デバッガでウオッチすればいい
シリアリズしてstd::cout
シリアライズのコードぱくれば作れそうだな
boost::this_thread::sleep(boost::get_system_time() + boost::posix_time::milliseconds(1));
boost::this_thread::sleep(boost::posix_time::milliseconds(1));
↑ふたつって、意味は同じ?
それとも、下側のソースは、基準になる現在時刻がないから、最低の時間(オーバヘッド)のsleepになる?
どういうルールでどのテンプレートが利用されるのかが理解できないです。
よろしくおねがいします。
…boostスレに書いたほうがいいです?(過疎ってるみたいなのでこちらに書いてみました。)
>【初心者歓迎】C/C++室 Ver.76【環境依存OK
>>836 @ 2011/11/30(水) 10:57:59.02
でも同じ質問を書きましたのでマルチです。1week経ったので引っ越しました。
boostのメルセンヌ・ツイスタを自作のアプリケーションに使用した場合にも 「著作権表示、ライセンス条文、無保証の旨」を書かないと駄目なんでしょうか? それとメルセンヌ・ツイスタに限らずboostを利用する際にライセンスに関わる注意点はありますか?
>>782 ありがとうございます
ヘッダを見ればよかったんですね
>>780 > boost::this_thread::sleep(boost::get_system_time() + boost::posix_time::milliseconds(1));
> boost::this_thread::sleep(boost::posix_time::milliseconds(1));
> ↑ふたつって、意味は同じ?
意味は違うがよっぽど変な状況でないかぎり結果は同じ。
this_thread::sleepには指定した日時まで待機するのと指定した期間の間待機するのと二種類ある。
上側は指定した日時(たとえば01時23分45秒まで。上の例だと現在時刻の1ミリ秒後)まで待機するもので
下側は指定した期間(たとえば1秒間。上の例だと1ミリ秒間)待機するもの。
どっちになるかは引数の型で決まる。
785 :
デフォルトの名無しさん :2011/12/15(木) 07:47:16.25
Boost.Regex って、UTF8 テキストに対して使えますか? 例えば、"." を検索すると”あ”等のマルチバイト文字にマッチするのでしょうか?
使えない
ダメじゃん
馬鹿には無理
Boost.Anyなんて使うならLuaを組み込んだほうがまし
variantやanyを使って実行速度遅くするなら 工夫してunion使った方がマシな気がする 実行速度を落さないunionの拡張はboostにないのだろうか
unrestricted union使うぐらいならvariantでいいや
boost::array<int,5> arr = { {1,2,3,4,5} }; arrayで要素数を省略した初期化って現状不可能ですか?
微妙に意味がわからないがテンプレートをインスタンス化するときの<int,5>の5の省略は不可能(おそらくずっと)
要素数の後決めしたいとか、array使う意味が皆無になるんだが。
やっぱり不可能ですか、、、 後決めしたいというより、ただただ書くのを省略したいだけなんですがね。。。
>>796 #include <iostream>
#include <boost/array.hpp>
#define ARY(t, n, ...) \
static const t n ## _[] = {__VA_ARGS__}; \
boost::array<t, sizeof (n ## _) / sizeof (n ## _[0])> n = {{__VA_ARGS__}}
int main()
{
ARY(int, arr, 1, 2, 3, 4, 5);
std::cout << arr[2] << std::endl;
return 0;
}
省略できてもあまり嬉しくなかった。
int a[] = {1, 2}; のような事をしたかったってことなんだろうね
まさにそれをしたかった。なぜそうしなかったかというと、境界チェック付きの 配列を使いたかったから。
別スレで同じこといってるやつみたけど 結局boost使うことにしたのかな
ublasってopencvより遅い気がするのだけど気のせい? ublasの方が速い場合ってエクスプレッショナルテンプレートが効く場合だけ? gccのコンパイルオプションで同じぐらいの速度にならないものだろうか
>>797 どうでもいいがプリプロセッサの
可変長引数でコンパイルエラー
世の中C99対応のコンパイラばかりではない
>>801 分岐の少ない問題でOpenCVがublasごときに負けたら
OpenCVの存在意義が無くなると思うが?
OpenCVはGPUを使って数百の並列実行してるんだからな。
lexical_cast ってスレッドセーフ?
corutineはそろそろ正式リリースしてくれないものか
明けましておめでとうございます。 挨拶が遅くなり申し訳ありませんが、今年も何卒宜しくお願いいたします。
>>806 開けましておめでとうございます。
ところで、後でちょっとお話がありますので、
会議室を1時間くらい予約しておいてください
よろしく
>>808 打ち合わせどうだった?
何言われたの??
さてと、C++11への引っ越しを始めるとするか・・・。
corutineがいろいろ改変されたのあって どれが一番いいのかわからない x86 amd64 のwindows linux mac で動けばいいのだけど
@typeに登録しておこう(´;ω;`)
shared_ptrってスレッドオフしてallocate_sharedすればintrusive_ptrとパフォーマンスたいして変わらんっすよね?
shared_ptrのサイズはポインタ二つ分。 共有管理オブジェクトにはweak_ptr用のカウンタもある。 大した違いかどうかは場合による。
メモリ intrusive_ptr 生成破棄 intrusive_ptr 参照カウント増減 shared_ptr
void func2( boost::array<int, 3> & c) { c.assign( 0 ); } error: invalid initialization of reference of type ‘boost::array<int, 3ul>&’ from expression of type ‘const boost::array<int, 3ul>’ arrayを参照引数にできないんだっけ?
>>818 おまいはエラーメッセージも読めんのか?
ああ!constついてました
boost::fusion::list a の先頭要素が a.begin() で参照できないのがちょっと気持ち悪い
bjamの利点がわからないのですが、autoconfとかを用いずbjamを利用してるのは何故でしょうか?
POCOとほとんど同じ機能持つライブラリ ありませんか?
ubuntuでboost入れたら一瞬でインスコ完了で使えるようになった 一方、Windowsではサイズがでかい上にビルドにかなり時間がかかる。 この差はなんでつか?ちなみにWindowsではVCで使う感じです
apt-get とかでパッケージをインストールしたんのなら、既にバイナリが含まれてるからだろ。
なるへそ Windowsでは全部落としてきて自分でビルドしたからか
ポコチン
ちんぽこ
ちんぽこ商用ライセンスだと制限きついしなぁ
VC2010 Essentialsを使っています。 boost::serializationを使うと、アプリケーションを作成するためのプロジェクトでも .libと.expを作ってくれるようになるのですが、これを抑制する方法はないでしょうか?
ちんぼ
っぽ
ぬるぽ
>>831 前に別のライブラリで同じ症状に遭ったことがあるけど、解決策見つからず
本当にどうしても嫌なら、ビルド後のプロセスでdelするとか・・・
libが生成されるってことはエクスポートテーブルもできてるんだから ファイルを消せばいいってもんじゃないだろ どこかで間違えて__delcspec(dllexport)が定義されてるんだろうね
serializationがらみで
ttp://codepad.org/bp6RCbxw boost::shared_ptrのシリアライズコードを改造して、std::shared_ptr用の物を書いたのですが、
コレにカスタムデリータのサポートを追加するいいアイデア無いでしょうか?
poco高すぎだろ pro買わないとネットワーク系全滅だし
>>824 linuxでC++やるときってエディタ何使うんですか
emacsのタグジャンプの設定で苦労した覚えが
今はもっといいのあるんだろうか
現在Boostのthreadを使って、ワークパイルを管理するクラス、各スレッドに付随するクラス(ワーカーとします)を作っています。 ワーカーは仕事を一通り終えた後、管理クラスが終了許可を出すまで「待ち」を行うようにするため、mutexとconditionを用いています。 管理クラスが終了許可を出せば「待ち」が解除されてスレッドとして動作していた関数を完了するのですが、待ちが解除されるときにmutexにロックがかけられてしまいます(それより前でmutexにロックはかけていない)。 そのため、ワーカーが破棄されるときにmutexでunlock()関数を使わないとエラーが生じます。 ワーカーで行いたいことは通知が来るまで待つだけで、排他制御の必要はありませんが、わざわざunlock()を使わなければならないのでしょうか。 イメージ的にはconditionにmutexを渡さないwait()があれば期待通りになりそうなのですが、それは存在しません。 よろしくお願いします。また私の解釈に間違いがあれば指摘いただけると幸いです。
待つだけでいいならミューテックスでもいいのでは…そういう話ではない…? #include <iostream> #include <boost/thread.hpp> #include <unistd.h> void f( boost::mutex* guard ) { std::cout << "worker: working" << std::endl; std::cout << "worker: waiting until the mutex was unlocked" << std::endl; guard->lock(); std::cout << "worker: finished" << std::endl; guard->unlock(); } int main() { boost::mutex m; std::cout << "main: lock a mutex" << std::endl; m.lock(); std::cout << "main: create a worker" << std::endl; boost::thread worker(&f,&m); std::cout << "main: sleeping 3 seconds" << std::endl; sleep(3); std::cout << "main: unlock the mutex" << std::endl; m.unlock(); std::cout << "main: waiting for join" << std::endl; worker.join(); std::cout << "main: finished" << std::endl; return 0; } $ ./sample main: lock a mutex main: create a worker main: sleeping 3 seconds worker: working worker: waiting until the mutex was unlocked main: unlock the mutex main: waiting for join worker: finished main: finished
>>841 返信ありがとうございます。
管理側は仕事追加・終了許可時に、ワーカーのインスタンスそれぞれのメンバー変数であるconditionでnotifyすることで待ちを解除させています。
ワーカーは、管理側が仕事を追加すると通知を受けて仕事を開始するためにwhileループ内で待ちを行っています。(終了許可待ちと仕事待ちは共通のconditionとmutex)
void Worker::run() {
while (true) {
TaskData* task = NULL;
while (_taskBag->getTasks(&task)) {
job(task);
}
if (_finishable && _taskBag->numTasks() == 0) {
_mtx.unlock();
break;
}
_cond.wait(_mtx);
}
}
ワーカーが複数いるので、mutexロック解除で待ち解除の通知を行うと、「仕事追加→いずれかのワーカーが仕事に着手」の後にmutexの所有権が管理側に戻ってこないかもしれないので難しそうです。
まぁ実装の仕方次第でmutexだけでもいけそうですが。
あとよくよく考えると_cond.wait(_mtx)の時に暗黙的に_cond.wait(mutex::scoped_lock(_mtx))のようになっているんでしょうか。
となると、ロックがwait解除後に再度かけられてしまうのはある意味当たり前ですね。
申し訳ありません。簡潔な文章で伝えるのがもの凄く難しいですねw
waitにはmutexをロック済みのunique_lock渡す必要がある。直接mutexをwaitの渡せているのはたぶんVCのせい。 unique_lockのローカル変数を作ればunlockを呼び出す必要は無い。 condition_variableは他の変数と一緒に使うことが前提。 waitはnotifyの通知以外でも誤って解除されるのでbool変数などと合わせて使わないとだめ。 bool変数で確認するからにはmutexでの排他制御が必要。
>>843 ありがとうございます。
排他制御が要らなく見えていたので、待ちの実現だけにcondition、mutex両方を使うことに冗長さを感じていたのですが、conditionはそもそも単体では使わないものなんですね。
ちなみに_cond.wait(_mtx)の記述はXcode4.2でもできています。C++の引数1つの場合の暗黙的なコンストラクターですね。
こういう場合に暗黙的にできてしまうと見落としてしまう場合があって危険だと感じます。
>>844 それじゃあboostのバージョンが低いだけじゃないの?一時変数は非const参照に拘束できない。
>>845 Boost 1.48です。ちなみに上記の_mtxはワーカークラスのメンバー変数です。
>>846 そうか。あとはコードを実際に追わないと分からないわ。
boost::asioの非同期通信でhttpクライアントつくろうと思ってasync_read_someでデータ取ってるんだけど、何故か5kbくらいでデータが途中で切れちゃうんだ 誰かピンとくる人居ないか…助けてくれ
>>848 async_read_until使えば?
今作成中のプログラムに<boost/thread.hpp>と<boost/thread/condition.hpp>をインクルードすると、システムのlocale_facets.tccとboostのshared_count.hppにおいて大量のエラーが発生します。 これらのファイル自体には問題は無く、何らかの依存関係でエラーが出ているんだろうということは想像がつくのですが、全く原因がわかりません。 何かこのような現象について心当たりのある方は居られないでしょうか。 Xcode4.2で、ヘッダーサーチパスには/opt/local/includeを(boostはこの下にインストール)設定しています。ライブラリーファイルのリンクも行っています。 よろしくお願いします。
851 :
デフォルトの名無しさん :2012/02/15(水) 19:46:15.26
>>850 ですが、自己解決しました。申し訳有りません。
原因はboostを使っているソースファイルとは別のファイル内で定義した「swap」という名称のマクロでした。
それぞれのソースファイルを最終的にmain関数で参照する形となっていたためにboost内の何かとマクロ名が衝突したようです。
自分で定義したswapをユニークな名称に変更することで解決しました。
今後どなたかの参考になれば幸いです。
こらたかし!マクロは全部大文字にって言ったでしょ!
さすがにswapをマクロ名にするのはないな
854 :
デフォルトの名無しさん :2012/02/15(水) 22:26:50.21
cpp側なら問題なかったのですが、実装も含めたヘッダーに書いてしまったのが盲点の原因でした...
気が、狂っとる
君は優秀な人材だぜひマイクロソフトに就職しなさい
>cpp側なら問題なかったのですが よくねぇよ。 規格にちゃんと、 「標準ライブラリーのヘッダーをincludeする翻訳単位は、全標準ライブラリーヘッダーで宣言されている名前を#defineもしくは#undefしてはならない。」 と書いてある。 だから、ひとつでもどれか標準ライブラリーのヘッダーをincludeしたならば、swapという名前は#defineも#undefもできない。
min max
>>857 swapって名前標準ライブラリーにあるの?
あぁalgorithmにあるのか。使ったこと無かったわ。
嘘だろ…
iostreamをインクルードするだけで使えるというのに・・・。
>>859 名前だぞ名前。
クラスのメンバーにも等しく適用されると何故わからないんだ。
多くの標準ライブラリのクラスがswapという名前のメンバーを持っているのを知らないのか。
>>858 MSは禿にごめんなさいしないといけないよね
C++にテンプレートが無い様な時代から既に用意されてたんだから 後出しのハゲが謝りお願いすべき
小文字が入ってるマクロ名は紛らわしいから コンパイラが警告吐いてくれたらいいのにな
assertみたいなマクロ実装関数で警告が出ることになるか ところでassertをキーワードに昇格させて定数式なら コンパイル時エラー出す設計にはできなかったのかな そうするとstatic_assertと書き分けなくて良いような気もするけれど
例によってCとの互換性が
staticの方はともかくassertってあんまし使わなくねーか?
iOS開発でObjCのコンテナクラス類使わずにどうもSTL/boost多用してしまうんだけど 果たしてこれはよくないのかどうか・・・
871 :
デフォルトの名無しさん :2012/02/16(木) 15:37:52.34
threadのwaitってどこのサイトみても … while(!ready) { cond.wait(lock); } … のようになっていますよね。これを起こす場合には ready = true; cond.notify_all(); とすると思うのですが、while分の!readyを判定してからcon.waitをかけるまでの間に上記の起こすコードが呼ばれた場合には、動かなくなってしまう気がします。 これを回避する方法などあるのでしょうか。timed_waitでしょうか。
>>871 cond.wait(lock);でロックを要求している素晴らしい設計を無視するなよ
873 :
デフォルトの名無しさん :2012/02/16(木) 19:01:27.73
>>872 ありがとうございます。
よくよく考えてみるとwhile文の前と起こすコードの先頭でミューテックスをロックすればいいんですね。
今まで引っかかっていたものがスッキリとれました!
>>872 ,873を理解するまで1時間かかってしまった
1.49出たのに反応なしか
小学生並みの発想だな
中学生並みの反応だな
大学生並の考察だな
院生並の皮肉だな
社会人並みの判断だな
年金生活者は余裕だな。
病院生活並の苦労だな
世捨て人並の達観だな
銀河皇帝並みの独断だな
原子核級の大志だな
風俗嬢並の偏屈だな
俺並みの性欲だな
風説の流布
痛風の呂布
風呂の風俗
温泉の効能
駄レスがスレをboostする!
歌舞伎町の893
ゲスの極み
お肉の厚み
boostってC++11の要素は取り込みはじめてるの?
C++11がBoostを取り込んだの間違いだろ Boost.Moveのことなら知らん
Boost.Chrono とかは C++11 からの逆輸入。
既存コンパイラで動くようにしてくれてるならいいことだ
◆ 便利な今までに出た風説の流布一覧 伝説の流川 伝説の呂布 解説の掛布 風疹の漁夫 ふーてんの流浪 妖鳥の流布 入れ墨の鯨布 風の谷の呂布 骨折に湿布 聖教新聞の配布 電設の鈴木 通風の湿布 テンセルの毛布 テンソルの分布 ピンサロの主婦 風雪ながれ旅 風雪の露天風呂 風俗で炉利 風俗の幕府 風てんのトラ 温泉の掛川 風の谷のナウシカ 季布の一諾 空席の椅子 秀策の棋譜 特攻の拓 ピンフの20符
最近おれっちの話が出来ていないが、C++11先取りしておれっちを実装するコンパイラってまだ出てきてないの?
serialization を使ったときに、exe ファイルにいろんなシンボルがエクスポートされるのを防ぐ方法ってないでしょうか?
仕様です
>>901 あれ、あなた風の噂で左遷されたって噂を聞いてたけど・・・?
boost::optional<int> test () { return 1; } void func { if (auto i = test() && i.get() != -1) { return ; } } これコンパイル通らないけどどうして?
funcの定義
void func () { ↑
>>906-908 そこじゃなくて
>if (auto i = test() && i.get() != -1) {
俺が言いたいのはこっちのほうだった
auto i = test()この段階で初期化されてるはずなんだけどどうして無理なんだろう
>>909 規定された条件部の文法↓にマッチしないから。
condition:
expression
attribute-specifier-seq/opt decl-specifier-seq declarator = initializer-clause
attribute-specifier-seq/opt decl-specifier-seq declarator braced-init-list
テンプレートクラスのメンバ関数を、 boost::threadとboost::bindで呼び出して、別スレッドで動かしたいのですが うまくいきません。ご教授願います。 template<class T> class TestClass : public T { public: TestClass(void) : T() {} }; class TestBase { public: void print(TCHAR *str){ cout << str << endl; }; }; typedef TestClass<TestBase> MyTestClass; int _tmain(int argc, _TCHAR* argv[]) { TCHAR *char str = _T("test"); MyTestClass myTestClass; myTestClass.print(str); // 正常に動作 boost::thread myThread(boost::bind(&MyTestClass::print,str)); // ←コンパイルエラー // c:\Program Files\boost\boost_1_47\boost\bind\mem_fn.hpp(333): error C2296: '->*' : 無効な左オペランドです。 }
>>912 boost::bindでクラスのメンバ関数ポインタを拘束した場合、第一引数はそのクラスのインスタンス(かインスタンスのポインタとか)になる
boost::bind(&MyTestClass::print, myTestClass, str)
>>913 ありがとうございます。無事にコンパイルが通りました。
boost::threadを使って、メンバ関数ではなくて、 クラスそのものを別スレッドで動かしたい場合は、どのように指定すればよいでしょうか?
916 :
915 :2012/04/21(土) 20:04:05.95
boost::threadに渡せるのは関数ポインタだけなのかな? boost::threadにクラスのコンストラクタを渡せば、そのクラスは別スレッドで動いてくれるのかと思ったけど 勘違いでしょうか?
クラスが動くってなんだ? ・・・って関数オブジェクトのことか? 関数オブジェクトのインスタンスを渡せばそのoperator()を別スレッドで実行させることはできる
>>916 具体的にどんなコードを書きたいのかここに出したほうが良いと思う。
919 :
915 :2012/04/21(土) 21:36:19.05
ウインドウクラスをクラス化したので、 そのクラスを別スレッドにして、プロシージャなどの処理をしたかったんです。 とりあえず、グローバル関数作って、その中でクラスのインスタンスを作って、 boost::threadでそのグローバル関数を呼び出す形にしてみました。 いちいち関数を作るのも面倒なので、無名関数でやってみようかな。 無名関数使ったことないけど。
JavaやFlashで使われている、イベント/リスナーをC++で実現したいのですが、 boostを使ってできますでしょうか?
>>920 イベントはシステム側の要求でとある時に「この処理をどうします?」ってプログラマに聞くことなのでそれは可能。
で、リスナは結局デリゲートかなんかに処理をキックする機構なので、
例えばバインドなどでインスタンス関数をイベントに渡したりしたとして、そのインスタンスの寿命がなくなって無効になるタイミングをコントロール出来れば可能だろう。
と、言うわけでできなくは無いけど、GC無いからそこをどうにかしないと難しいと思う。
boost::graphについて質問です。 例えば、RPGゲームのマップ移動の最短経路を求めたいとします。 ただしマップを通過できるかどうかは条件があって、 ・一定のキャラクターレベルを超えていないと通れない ・特定のアイテムを所有していないと通れない などの条件があります。 私の考えたチープなやり方では、propertyでマップノードごとにRequireLevel、RequireItems などを持たせて、 レベルによってグラフノードの書き換えをする関数、 DisableGraphByLevel(graph,characterInfo); アイテムの有無によってグラフノードの書き換えをする関数、 DisableGraphByItem(graph,characterInfo); などを処理してから、グラフに対して最短経路アルゴリズムを実行するという形です。 ただ、これだと処理後に毎回グラフを元に戻さないといけないし、 条件がより複雑なものが追加されるとこの形では対応できません。 それに第一、スマートではありません。 boostっぽく処理するにはどのように設計すればよろしいでしょうか?
924 :
922 :2012/04/27(金) 14:45:37.73
>>923 ありがとうございます。参考にして見ます。
boostを使うだけでなく、boostの中身を理解して、自分でアロケーターだとか
イテレーターとか作ってみたいと思っているのですが、
やんやんさんのように高度に詳しくなるには、どういった書籍やサイトがお勧めでしょうか?
よろしければ教えてください。
document嫁
>>905 if (auto i = test() && i.get() != -1) {
↓
auto i = test() && i.get() != -1;
↓
auto n = test() && i.get() != -1;
auto i = n;
多少構文をばらしてみれば無理なの解るだろ
>>920 boost::functionとboost::bindと、なんかブロードキャストするクラスか
なんかがあったから、それ組み合わせりゃ楽にできるよ
>>924 興味があるところから入っていって、もっと知りたいと思ったら勝手に詳しくなるもの
>>920 boost::signals2はどうだろ
<boost/thread.hpp>をインクルードすると下記のエラーが出ます。
どうすればいいでしょうか?
開発環境はVC++ 2008/2010 WinXPです
ソースコードは
http://metalphaeton.blogspot.jp/2011/04/boostthread.html ここにあるものをそのまま使いました
1>c:\program files\boost\boost_1_47\boost\thread\win32\basic_timed_mutex.hpp(160) : warning C4793: boost::detail::basic_timed_mutex::unlock': ネイティブ関数としてコンパイルされました:
1> マネージ コードでサポートされていない組み込み型が見つかりました
1>c:\program files\boost\boost_1_47\boost\thread\win32\thread_primitives.hpp(314) : warning C4793: boost::detail::win32::interlocked_bit_test_and_set': ネイティブ関数としてコンパイルされました:
1> マネージ コードでサポートされていない組み込み型が見つかりました
1>main.obj : warning LNK4248: 未解決の typeref トークン (0100001F) ('boost.detail.win32._SECURITY_ATTRIBUTES') です。イメージを実行できません。
C++/CLIではthreadはうまく動かない 昔いろいろやってコンパイルだけはできるようになったけど、結局動くことはなかった
C++/CLIはスレッド出来る。.NETとおなじ機能。 C#でも不可能と言うことになる。
.NETのVMのスレッド用API機能とWin32のスレッド用API 混在してもまともに動く気がしない
>>934 933の言っているのはboost threadの話。
boostスレだからboostは省いたんだろう。
937 :
デフォルトの名無しさん :2012/05/25(金) 18:04:12.87
VisualStudio 2010 でboost::filesystem::directory_iterator の leaf() を使いたいんですが Version 1.36 では使えません、どのバージョンなら使えますか。 もしかして、まだ、未対応ですか?
2年前に1.42で使ってたきがした。 少なくてもその辺以降なら使えるんじゃないだろうか。 後は詳しい人よろしく
leafって名前変わらなかったっけ?
>>938 です
thx です。
ごめんなさい、バージョンを間違えていました。
boost_1_46_1 でした。が、leaf() って使えないんですね?
<boost/filesystem/fstream.hpp> を調べると
#if BOOST_FILESYSTEM_VERSION == 2
# include <boost/filesystem/v2/fstream.hpp>
# else
Visual Studio 2010 ではundef になっています?
leaf() ってboost/filesystem/v2/fstream.hpp に入っているようなので
どうしたら使えますか?
自己解決しました マクロできってやるだけで、V2使えました。
leafはpathに名前変わった ってもう見てないよね
path().filename() だろ
boost.intrusive でコンテナに同じ要素を2つ以上登録するのってできないの? lets boostの例で同じ要素追加しようとしたらエラーになった lst.push_back(*pa); lst.push_back(b); lst.push_back(c); lst.push_back(*pa); ここでおかしくなる
auto d = *pa; lst.push_back(d); しよう
>>945 できない。仕組み考えればわかるだろ
class hoge
{
hoge *prev;
hoge *next;
int value;
}
みたいな構造でprevやnextに自分自身のポインタを入れてリンクの終端を探して探索すれば無限ループになる
boost::interprocess::shared_ptrってプロセス間通信用の名前空間に入ってるけど、 DLLの入出力なんかに使ったら、常にexeとdllで同じバージョンに保っとかないと クラッシュするよね。なんで:interprocessの中に入ってんの?
>>948 ?
それをいうならshared_ptrに限らず異なる領域にあるモジュール間の通信に使うものは
双方のモジュールで互換性のあるものを使わないと問題がでるけど。
(必ずしも同じバージョンの同じライブラリを使う必要はない。そのほうが単純に楽で確実性が高いだけ)
それとBoost.'Interprocess'は名前どおりのプロセス間通信用に限定されたものでなくスレッド間通信用のライブラリでもある。
>>949 やっぱダメなんやね。
外から見るとテンプレートで型安全。
内部ではvoid* で保持。
実装ははpimplでDLLに配置ってな感じで
自前でスマポ作らないと安全な仕様は無理か。
両方自前ならknown/rquest versionのやり取りするだけじゃん?
boostでLU分解で逆行列を作ってみた 2000x2000もそこそこの時間ででき A*A-1もきっちり単位行列で帰ってきた。 教えてほしいのですが、 boostのLU分解は マルチスレッド対応なのか 丸め誤差を内部できっちりやってるのでA*A-1が正確なのか 10000x10000はboost LU分解で対応できるのか?
ソースみたら
コンパイルオプションなしで 勝手にマルチスレッドになるなんてことあったかな
thread-safeかどうかを聞いているのかもしれんぞ
#pragma で勝手に動的リンクするMSVC があるのだから、同じようにマルチスレッドもやってくれたりするかも
Open MPつかえばええがな
似非関西弁キタ
馬鹿には無理
960 :
デフォルトの名無しさん :2012/06/25(月) 23:13:19.35
unique_ptrを戻り値とする場合、thisを返したかったらどうするの? unique_ptr版enable_shared_from_thisってなくね?
所有権を持ってるインスタンスに返してもらえばいい
static関数
>>961 ごめん間違えたわ。親クラスでunique_ptrを返すように定義してあった場合、
手持ちのshared_ptrを返すにはって事だった。
thisかどうかはどうでも良かったわ。
vc2005+stlportでboost 1.50コンパイルすると program_optionsでエラー吐くんだけど俺だけ?
boost::spiritで四則演算できたぜ。意味無いだろ。
std::tr1::regex 超はえー boost::regex 不要となったなw
処理系によるだろ すべての処理系で速くなったのか?
頑張った可能性はある
むしろ処理系に適した最適化がされてる可能性が高い
VC++2010のstd::regexは遅かったからxpressiveにしたよん
xpressiveってそんな早いの?
大概サードの方が速いけどな Blits++とか良い例
実際標準コンテナも遅いしな
xpressive早いし互換度高くなってた 以前は互換の問題で使いづらかったけどもうregex使い続ける意味ない
boost::iterator使って、mapのiteratorみたいに2つの要素を持つiteratorって作れるのかな? 単純にdereferenceでboost::tupleを返してもwarning出るんだ…
今更落としてみたけど1.50って300Mしかないのな 1.47は1Gもあるのに
その1.47ってビルド済だろ
979 :
デフォルトの名無しさん :2012/07/13(金) 18:15:31.55
ちなみに 32bit/64btで.dllを生成するもの以外の 全オプションの組み合わせのバイナリ含み 全部で6GBだけど 7zの最高圧縮率でまとめると250MB切った 7zipスゴイw
>>977 1.50はうち1.75GBあるんやけど
ソースでzipがだいたい100Mか。 Unix用のbz2で50Mとは。圧縮度けっこう違うんだな。知らなかったすごい。