[過去ログ] Boost総合スレ part9 (981レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
908(1): デフォルトの名無しさん [sage] 2012/04/11(水) 21:59:09.93 AAS
>>905905(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 ;
}
}
これコンパイル通らないけどどうして?
エラーメッセージ見ろよ。
909(1): デフォルトの名無しさん [sage] 2012/04/12(木) 00:58:06.25 AAS
>>906-908
そこじゃなくて
>if (auto i = test() && i.get() != -1) {
俺が言いたいのはこっちのほうだった
auto i = test()この段階で初期化されてるはずなんだけどどうして無理なんだろう
910(1): デフォルトの名無しさん [sage] 2012/04/12(木) 01:05:06.21 AAS
>>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: デフォルトの名無しさん [sage] 2012/04/12(木) 01:25:55.07 AAS
>>910
そもそも規格上無理なのね
ありがとう
912(1): デフォルトの名無しさん [sage] 2012/04/21(土) 16:18:52.52 AAS
テンプレートクラスのメンバ関数を、
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(1): デフォルトの名無しさん [sage] 2012/04/21(土) 17:52:34.92 AAS
>>912
boost::bindでクラスのメンバ関数ポインタを拘束した場合、第一引数はそのクラスのインスタンス(かインスタンスのポインタとか)になる
boost::bind(&MyTestClass::print, myTestClass, str)
914: デフォルトの名無しさん [sage] 2012/04/21(土) 18:08:58.52 AAS
>>913
ありがとうございます。無事にコンパイルが通りました。
915(2): デフォルトの名無しさん [sage] 2012/04/21(土) 19:19:10.20 AAS
boost::threadを使って、メンバ関数ではなくて、
クラスそのものを別スレッドで動かしたい場合は、どのように指定すればよいでしょうか?
916(1): 915 [sage] 2012/04/21(土) 20:04:05.95 AAS
boost::threadに渡せるのは関数ポインタだけなのかな?
boost::threadにクラスのコンストラクタを渡せば、そのクラスは別スレッドで動いてくれるのかと思ったけど
勘違いでしょうか?
917: デフォルトの名無しさん [sage] 2012/04/21(土) 20:54:52.22 AAS
クラスが動くってなんだ?
・・・って関数オブジェクトのことか?
関数オブジェクトのインスタンスを渡せばそのoperator()を別スレッドで実行させることはできる
918: デフォルトの名無しさん [sage] 2012/04/21(土) 21:32:08.83 AAS
>>916
具体的にどんなコードを書きたいのかここに出したほうが良いと思う。
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
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++じゃありません
上下前次1-新書関写板覧索設栞歴
あと 49 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.024s