[過去ログ] Boost総合スレ part9 (981レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
919: 915 [sage] 2012/04/21(土) 21:36:19.05 AAS
ウインドウクラスをクラス化したので、
そのクラスを別スレッドにして、プロシージャなどの処理をしたかったんです。

とりあえず、グローバル関数作って、その中でクラスのインスタンスを作って、
boost::threadでそのグローバル関数を呼び出す形にしてみました。
いちいち関数を作るのも面倒なので、無名関数でやってみようかな。
無名関数使ったことないけど。
920
(3): デフォルトの名無しさん [sage] 2012/04/22(日) 02:06:07.47 AAS
JavaやFlashで使われている、イベント/リスナーをC++で実現したいのですが、
boostを使ってできますでしょうか?
921: デフォルトの名無しさん [sage] 2012/04/22(日) 02:13:52.12 AAS
>>920
イベントはシステム側の要求でとある時に「この処理をどうします?」ってプログラマに聞くことなのでそれは可能。
で、リスナは結局デリゲートかなんかに処理をキックする機構なので、
例えばバインドなどでインスタンス関数をイベントに渡したりしたとして、そのインスタンスの寿命がなくなって無効になるタイミングをコントロール出来れば可能だろう。

と、言うわけでできなくは無いけど、GC無いからそこをどうにかしないと難しいと思う。
922
(1): デフォルトの名無しさん [sage] 2012/04/25(水) 18:39:55.58 AAS
boost::graphについて質問です。
例えば、RPGゲームのマップ移動の最短経路を求めたいとします。
ただしマップを通過できるかどうかは条件があって、
・一定のキャラクターレベルを超えていないと通れない
・特定のアイテムを所有していないと通れない
などの条件があります。

私の考えたチープなやり方では、propertyでマップノードごとにRequireLevel、RequireItems
などを持たせて、
レベルによってグラフノードの書き換えをする関数、
DisableGraphByLevel(graph,characterInfo);
アイテムの有無によってグラフノードの書き換えをする関数、
DisableGraphByItem(graph,characterInfo);
などを処理してから、グラフに対して最短経路アルゴリズムを実行するという形です。

ただ、これだと処理後に毎回グラフを元に戻さないといけないし、
条件がより複雑なものが追加されるとこの形では対応できません。
それに第一、スマートではありません。
boostっぽく処理するにはどのように設計すればよろしいでしょうか?
923
(1): やんやん ◆yanyan72E. [sage] 2012/04/26(木) 02:13:10.40 AAS
外部リンク[html]:www.boost.org
これの、distance_mapとか、distance_compareとかdistance_combineとかを
うまく定義すれば、グラフを書き換えなくても望みの動作をさせられるんでない?
924
(1): 922 [sage] 2012/04/27(金) 14:45:37.73 AAS
>>923
ありがとうございます。参考にして見ます。

boostを使うだけでなく、boostの中身を理解して、自分でアロケーターだとか
イテレーターとか作ってみたいと思っているのですが、
やんやんさんのように高度に詳しくなるには、どういった書籍やサイトがお勧めでしょうか?
よろしければ教えてください。
925: デフォルトの名無しさん [sage] 2012/04/27(金) 18:41:03.11 AAS
document嫁
926: デフォルトの名無しさん [sage] 2012/04/27(金) 22:27:30.41 AAS
>>905
905(2): 営利利用に関するLR審議中@詳細は自治スレへ [sage] 2012/04/11(水) 19:36:20.60 AAS
boost::optional<int> test () { return 1; }

void func {
if (auto i = test() && i.get() != -1) {
return ;
}
}
これコンパイル通らないけどどうして?
if (auto i = test() && i.get() != -1) {

auto i = test() && i.get() != -1;

auto n = test() && i.get() != -1;
auto i = n;

多少構文をばらしてみれば無理なの解るだろ
927: デフォルトの名無しさん [sage] 2012/04/27(金) 22:29:18.96 AAS
>>920
boost::functionとboost::bindと、なんかブロードキャストするクラスか
なんかがあったから、それ組み合わせりゃ楽にできるよ
928: デフォルトの名無しさん [sage] 2012/04/27(金) 22:43:36.06 AAS
>>924
興味があるところから入っていって、もっと知りたいと思ったら勝手に詳しくなるもの
929: デフォルトの名無しさん [sage] 2012/04/27(金) 23:47:34.23 AAS
>>920
boost::signals2はどうだろ
930
(2): デフォルトの名無しさん [sage] 2012/05/20(日) 00:07:51.46 AAS
<boost/thread.hpp>をインクルードすると下記のエラーが出ます。
どうすればいいでしょうか?
開発環境はVC++ 2008/2010 WinXPです
ソースコードは
外部リンク[html]:metalphaeton.blogspot.jp
ここにあるものをそのまま使いました

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: デフォルトの名無しさん [sage] 2012/05/20(日) 00:31:14.34 AAS
>>930
本当にC++ですか?
932: デフォルトの名無しさん [sage] 2012/05/20(日) 07:07:29.09 AAS
>>930
C++/CLIはC++じゃありません
933: デフォルトの名無しさん [sage] 2012/05/21(月) 12:40:42.28 AAS
C++/CLIではthreadはうまく動かない

昔いろいろやってコンパイルだけはできるようになったけど、結局動くことはなかった
934
(1): デフォルトの名無しさん [sage] 2012/05/21(月) 13:07:13.78 AAS
C++/CLIはスレッド出来る。.NETとおなじ機能。
C#でも不可能と言うことになる。
935: デフォルトの名無しさん [sage] 2012/05/21(月) 15:37:34.03 AAS
.NETのVMのスレッド用API機能とWin32のスレッド用API
混在してもまともに動く気がしない
936: デフォルトの名無しさん [sage] 2012/05/21(月) 15:43:05.54 AAS
>>934
933の言っているのはboost threadの話。
boostスレだからboostは省いたんだろう。
937: デフォルトの名無しさん [] 2012/05/25(金) 18:04:12.87 AAS
spirit::qiで質問なんですが、Attributeを捨てることって出来ないんでしょうか?
stringを返すruleを使うと、一番上までstringを返さないと存在しないAttribute(string)にアクセスしようとして
不正落ちしてしまいます。
パース中に使用し終わって、解析後にまで残す必要ないものなので捨てたいんですが・・・

あとついでに
>>757
757(1): デフォルトの名無しさん [sage] 2011/11/25(金) 22:45:17.23 AAS
boost.spirit.qiでセマンティックアクションから、
一致したruleのrangeを示すiteratorが欲しいのですがclassicを使うしか方法はないのでしょうか?
例えば、以下の様にしたいです。

void action(Iter first, Iter last){ ... }
//...
(char_('(') >> *char_('0') >> char_(')'))[action];
外部リンク[html]:www.boost.org
このディレクティブを使えばiterator_rangeを受け取れるようです
938
(1): デフォルトの名無しさん [sage] 2012/06/03(日) 09:10:19.76 AAS
VisualStudio 2010 でboost::filesystem::directory_iterator の leaf() を使いたいんですが
Version 1.36 では使えません、どのバージョンなら使えますか。
もしかして、まだ、未対応ですか?
939: デフォルトの名無しさん [sage] 2012/06/03(日) 09:14:06.80 AAS
2年前に1.42で使ってたきがした。
少なくてもその辺以降なら使えるんじゃないだろうか。

後は詳しい人よろしく
940: デフォルトの名無しさん [sage] 2012/06/03(日) 09:26:54.17 AAS
leafって名前変わらなかったっけ?
941: デフォルトの名無しさん [sage] 2012/06/03(日) 10:10:51.40 AAS
>>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: デフォルトの名無しさん [sage] 2012/06/03(日) 10:26:23.13 AAS
自己解決しました
マクロできってやるだけで、V2使えました。
943: デフォルトの名無しさん [sage] 2012/06/11(月) 18:33:25.03 AAS
leafはpathに名前変わった
ってもう見てないよね
1-
あと 38 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.014s