- 1 名前:デフォルトの名無しさん [2010/05/28(金) 11:49:47 ]
- 過去スレ
Part 8 pc12.2ch.net/test/read.cgi/tech/1251446016/ part 7 pc12.2ch.net/test/read.cgi/tech/1232367742/ part 6 pc11.2ch.net/test/read.cgi/tech/1207749841/ part 5 pc11.2ch.net/test/read.cgi/tech/1192662575/ part 4 pc11.2ch.net/test/read.cgi/tech/1175663346/ part 3 pc11.2ch.net/test/read.cgi/tech/1158991211/ part 2 pc8.2ch.net/test/read.cgi/tech/1139313234/ part 1 pc8.2ch.net/test/read.cgi/tech/1091198276/ ■関連サイト■ Boost C++ Libraries www.boost.org/ Boost 翻訳プロジェクト boost.cppll.jp/HEAD/ Let's Boost www.kmonos.net/alang/boost/ boost info shinh.skr.jp/boost/
- 910 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 01:05:06.21 ]
- >>909
規定された条件部の文法↓にマッチしないから。 condition: expression attribute-specifier-seq/opt decl-specifier-seq declarator = initializer-clause attribute-specifier-seq/opt decl-specifier-seq declarator braced-init-list
- 911 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 01:25:55.07 ]
- >>910
そもそも規格上無理なのね ありがとう
- 912 名前:デフォルトの名無しさん mailto:sage [2012/04/21(土) 16:18:52.52 ]
- テンプレートクラスのメンバ関数を、
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: '->*' : 無効な左オペランドです。 }
- 913 名前:デフォルトの名無しさん mailto:sage [2012/04/21(土) 17:52:34.92 ]
- >>912
boost::bindでクラスのメンバ関数ポインタを拘束した場合、第一引数はそのクラスのインスタンス(かインスタンスのポインタとか)になる boost::bind(&MyTestClass::print, myTestClass, str)
- 914 名前:デフォルトの名無しさん mailto:sage [2012/04/21(土) 18:08:58.52 ]
- >>913
ありがとうございます。無事にコンパイルが通りました。
- 915 名前:デフォルトの名無しさん mailto:sage [2012/04/21(土) 19:19:10.20 ]
- boost::threadを使って、メンバ関数ではなくて、
クラスそのものを別スレッドで動かしたい場合は、どのように指定すればよいでしょうか?
- 916 名前:915 mailto:sage [2012/04/21(土) 20:04:05.95 ]
- boost::threadに渡せるのは関数ポインタだけなのかな?
boost::threadにクラスのコンストラクタを渡せば、そのクラスは別スレッドで動いてくれるのかと思ったけど 勘違いでしょうか?
- 917 名前:デフォルトの名無しさん mailto:sage [2012/04/21(土) 20:54:52.22 ]
- クラスが動くってなんだ?
・・・って関数オブジェクトのことか? 関数オブジェクトのインスタンスを渡せばそのoperator()を別スレッドで実行させることはできる
- 918 名前:デフォルトの名無しさん mailto:sage [2012/04/21(土) 21:32:08.83 ]
- >>916
具体的にどんなコードを書きたいのかここに出したほうが良いと思う。
- 919 名前:915 mailto:sage [2012/04/21(土) 21:36:19.05 ]
- ウインドウクラスをクラス化したので、
そのクラスを別スレッドにして、プロシージャなどの処理をしたかったんです。 とりあえず、グローバル関数作って、その中でクラスのインスタンスを作って、 boost::threadでそのグローバル関数を呼び出す形にしてみました。 いちいち関数を作るのも面倒なので、無名関数でやってみようかな。 無名関数使ったことないけど。
- 920 名前:デフォルトの名無しさん mailto:sage [2012/04/22(日) 02:06:07.47 ]
- JavaやFlashで使われている、イベント/リスナーをC++で実現したいのですが、
boostを使ってできますでしょうか?
- 921 名前:デフォルトの名無しさん mailto:sage [2012/04/22(日) 02:13:52.12 ]
- >>920
イベントはシステム側の要求でとある時に「この処理をどうします?」ってプログラマに聞くことなのでそれは可能。 で、リスナは結局デリゲートかなんかに処理をキックする機構なので、 例えばバインドなどでインスタンス関数をイベントに渡したりしたとして、そのインスタンスの寿命がなくなって無効になるタイミングをコントロール出来れば可能だろう。 と、言うわけでできなくは無いけど、GC無いからそこをどうにかしないと難しいと思う。
- 922 名前:デフォルトの名無しさん mailto:sage [2012/04/25(水) 18:39:55.58 ]
- boost::graphについて質問です。
例えば、RPGゲームのマップ移動の最短経路を求めたいとします。 ただしマップを通過できるかどうかは条件があって、 ・一定のキャラクターレベルを超えていないと通れない ・特定のアイテムを所有していないと通れない などの条件があります。 私の考えたチープなやり方では、propertyでマップノードごとにRequireLevel、RequireItems などを持たせて、 レベルによってグラフノードの書き換えをする関数、 DisableGraphByLevel(graph,characterInfo); アイテムの有無によってグラフノードの書き換えをする関数、 DisableGraphByItem(graph,characterInfo); などを処理してから、グラフに対して最短経路アルゴリズムを実行するという形です。 ただ、これだと処理後に毎回グラフを元に戻さないといけないし、 条件がより複雑なものが追加されるとこの形では対応できません。 それに第一、スマートではありません。 boostっぽく処理するにはどのように設計すればよろしいでしょうか?
- 923 名前:やんやん ◆yanyan72E. mailto:sage [2012/04/26(木) 02:13:10.40 ]
- www.boost.org/doc/libs/1_49_0/libs/graph/doc/dijkstra_shortest_paths.html
これの、distance_mapとか、distance_compareとかdistance_combineとかを うまく定義すれば、グラフを書き換えなくても望みの動作をさせられるんでない?
- 924 名前:922 mailto:sage [2012/04/27(金) 14:45:37.73 ]
- >>923
ありがとうございます。参考にして見ます。 boostを使うだけでなく、boostの中身を理解して、自分でアロケーターだとか イテレーターとか作ってみたいと思っているのですが、 やんやんさんのように高度に詳しくなるには、どういった書籍やサイトがお勧めでしょうか? よろしければ教えてください。
- 925 名前:デフォルトの名無しさん mailto:sage [2012/04/27(金) 18:41:03.11 ]
- document嫁
- 926 名前:デフォルトの名無しさん mailto:sage [2012/04/27(金) 22:27:30.41 ]
- >>905
if (auto i = test() && i.get() != -1) { ↓ auto i = test() && i.get() != -1; ↓ auto n = test() && i.get() != -1; auto i = n; 多少構文をばらしてみれば無理なの解るだろ
- 927 名前:デフォルトの名無しさん mailto:sage [2012/04/27(金) 22:29:18.96 ]
- >>920
boost::functionとboost::bindと、なんかブロードキャストするクラスか なんかがあったから、それ組み合わせりゃ楽にできるよ
- 928 名前:デフォルトの名無しさん mailto:sage [2012/04/27(金) 22:43:36.06 ]
- >>924
興味があるところから入っていって、もっと知りたいと思ったら勝手に詳しくなるもの
- 929 名前:デフォルトの名無しさん mailto:sage [2012/04/27(金) 23:47:34.23 ]
- >>920
boost::signals2はどうだろ
- 930 名前:デフォルトの名無しさん mailto:sage [2012/05/20(日) 00:07:51.46 ]
- <boost/thread.hpp>をインクルードすると下記のエラーが出ます。
どうすればいいでしょうか? 開発環境はVC++ 2008/2010 WinXPです ソースコードは 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') です。イメージを実行できません。
- 931 名前:デフォルトの名無しさん mailto:sage [2012/05/20(日) 00:31:14.34 ]
- >>930
本当にC++ですか?
- 932 名前:デフォルトの名無しさん mailto:sage [2012/05/20(日) 07:07:29.09 ]
- >>930
C++/CLIはC++じゃありません
- 933 名前:デフォルトの名無しさん mailto:sage [2012/05/21(月) 12:40:42.28 ]
- C++/CLIではthreadはうまく動かない
昔いろいろやってコンパイルだけはできるようになったけど、結局動くことはなかった
- 934 名前:デフォルトの名無しさん mailto:sage [2012/05/21(月) 13:07:13.78 ]
- C++/CLIはスレッド出来る。.NETとおなじ機能。
C#でも不可能と言うことになる。
- 935 名前:デフォルトの名無しさん mailto:sage [2012/05/21(月) 15:37:34.03 ]
- .NETのVMのスレッド用API機能とWin32のスレッド用API
混在してもまともに動く気がしない
- 936 名前:デフォルトの名無しさん mailto:sage [2012/05/21(月) 15:43:05.54 ]
- >>934
933の言っているのはboost threadの話。 boostスレだからboostは省いたんだろう。
- 937 名前:デフォルトの名無しさん [2012/05/25(金) 18:04:12.87 ]
- spirit::qiで質問なんですが、Attributeを捨てることって出来ないんでしょうか?
stringを返すruleを使うと、一番上までstringを返さないと存在しないAttribute(string)にアクセスしようとして 不正落ちしてしまいます。 パース中に使用し終わって、解析後にまで残す必要ないものなので捨てたいんですが・・・ あとついでに >>757 www.boost.org/doc/libs/1_49_0/libs/spirit/doc/html/spirit/qi/reference/directive/raw.html このディレクティブを使えばiterator_rangeを受け取れるようです
- 938 名前:デフォルトの名無しさん mailto:sage [2012/06/03(日) 09:10:19.76 ]
- VisualStudio 2010 でboost::filesystem::directory_iterator の leaf() を使いたいんですが
Version 1.36 では使えません、どのバージョンなら使えますか。 もしかして、まだ、未対応ですか?
- 939 名前:デフォルトの名無しさん mailto:sage [2012/06/03(日) 09:14:06.80 ]
- 2年前に1.42で使ってたきがした。
少なくてもその辺以降なら使えるんじゃないだろうか。 後は詳しい人よろしく
- 940 名前:デフォルトの名無しさん mailto:sage [2012/06/03(日) 09:26:54.17 ]
- leafって名前変わらなかったっけ?
- 941 名前:デフォルトの名無しさん mailto:sage [2012/06/03(日) 10:10:51.40 ]
- >>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 に入っているようなので どうしたら使えますか?
- 942 名前:デフォルトの名無しさん mailto:sage [2012/06/03(日) 10:26:23.13 ]
- 自己解決しました
マクロできってやるだけで、V2使えました。
- 943 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 18:33:25.03 ]
- leafはpathに名前変わった
ってもう見てないよね
- 944 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 23:13:13.00 ]
- path().filename() だろ
- 945 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 00:15:07.24 ]
- boost.intrusive
でコンテナに同じ要素を2つ以上登録するのってできないの? lets boostの例で同じ要素追加しようとしたらエラーになった lst.push_back(*pa); lst.push_back(b); lst.push_back(c); lst.push_back(*pa); ここでおかしくなる
- 946 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 11:28:56.17 ]
- auto d = *pa;
lst.push_back(d); しよう
- 947 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 11:38:00.10 ]
- >>945
できない。仕組み考えればわかるだろ class hoge { hoge *prev; hoge *next; int value; } みたいな構造でprevやnextに自分自身のポインタを入れてリンクの終端を探して探索すれば無限ループになる
- 948 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 21:50:25.15 ]
- boost::interprocess::shared_ptrってプロセス間通信用の名前空間に入ってるけど、
DLLの入出力なんかに使ったら、常にexeとdllで同じバージョンに保っとかないと クラッシュするよね。なんで:interprocessの中に入ってんの?
- 949 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 23:31:39.75 ]
- >>948
? それをいうならshared_ptrに限らず異なる領域にあるモジュール間の通信に使うものは 双方のモジュールで互換性のあるものを使わないと問題がでるけど。 (必ずしも同じバージョンの同じライブラリを使う必要はない。そのほうが単純に楽で確実性が高いだけ) それとBoost.'Interprocess'は名前どおりのプロセス間通信用に限定されたものでなくスレッド間通信用のライブラリでもある。
- 950 名前:デフォルトの名無しさん mailto:sage [2012/06/15(金) 22:18:05.21 ]
- >>949
やっぱダメなんやね。 外から見るとテンプレートで型安全。 内部ではvoid* で保持。 実装ははpimplでDLLに配置ってな感じで 自前でスマポ作らないと安全な仕様は無理か。
- 951 名前:デフォルトの名無しさん mailto:sage [2012/06/15(金) 22:45:31.07 ]
- 両方自前ならknown/rquest versionのやり取りするだけじゃん?
|

|