トップページ > プログラム > 2014年11月18日 > 5SkfsGvC

書き込み順位&時間帯一覧

5 位/247 ID中時間01234567891011121314151617181920212223Total
書き込み数0010102010100000010000007



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
Win32API質問箱 Build118
C++相談室 part114
VB.NET質問スレ(Part41)

書き込みレス一覧

Win32API質問箱 Build118
787 :デフォルトの名無しさん[sage]:2014/11/18(火) 02:02:15.90 ID:5SkfsGvC
Win64apiは有るのか?
Win32API質問箱 Build118
789 :デフォルトの名無しさん[sage]:2014/11/18(火) 04:12:57.06 ID:5SkfsGvC
>>788
どういうことだよ。
Win32APIに有る関数をWin64で使ったら、
64ビットプログラムは、32ビットのAPIを呼び出すのか?
よくわからん。
C++相談室 part114
543 :デフォルトの名無しさん[sage]:2014/11/18(火) 06:12:02.52 ID:5SkfsGvC
#include <future>
#include <thread>
#include <iostream>

class MyClass{
public:
   int m_x, m_y;
   MyClass(int x, int y){
      this->m_x = x;
      this->m_y = y;
   }
   int add(){
      return m_x + m_y;
   }
};

template<class C> int func2(C &mc){
   return z = mc.add();
}

void main(){
   MyClass mc(10, 20);
   std::packaged_task<int(MyClass)> tsk(func2);   // このあたりの書き方が
   std::future<int> ret = tsk.get_future();
   std::thread th = std::thread(std::move(tsk), mc); // 分りません。
   int z = ret.get();
   printf("z = %d\n", z);
   th.join();
}
std::threadでテンプレート関数func2を呼び出すことは可能でしょうか?
ググってもさっぱり分らないので教えて下さい。よろしく。
C++相談室 part114
544 :デフォルトの名無しさん[sage]:2014/11/18(火) 06:55:44.18 ID:5SkfsGvC
訂正
誤 return z = mc.add();
正 return mc.add();
C++相談室 part114
546 :デフォルトの名無しさん[sage]:2014/11/18(火) 08:21:21.36 ID:5SkfsGvC
レス有難うございました。
書くのを忘れていたのですが、使っているのはVS2013のC++なんですが、
545さんのコードを入れたら
 IntelliSense: クラス テンプレート "std::packaged_task" の引数リストがありません
というエラーになります。
VB.NET質問スレ(Part41)
859 :デフォルトの名無しさん[sage]:2014/11/18(火) 10:40:03.29 ID:5SkfsGvC
>>855
MSDNの回答者には攻撃的な人が数名いますね。逆にとっても感じのいい人もいますが。
変な質問ならほっとけば良いのに。
C++相談室 part114
549 :デフォルトの名無しさん[sage]:2014/11/18(火) 17:40:06.80 ID:5SkfsGvC
みなさんレスありがとうございました。
547さんの方法で上手く行きました。

その後、良く分らないまま試行錯誤していたら、二か所の&が有っても無くてもVS2013 C++では実行できたのですが、


std::packaged_task<int(MyClass &)> tsk(&func2<MyClass>); // このあたりの書き方が(1) 547さんオリジナル
std::packaged_task<int(MyClass &)> tsk(func2<MyClass>); // このあたりの書き方が(2)
std::packaged_task<int(MyClass)> tsk(&func2<MyClass>); // このあたりの書き方が(3)
std::packaged_task<int(MyClass)> tsk(func2<MyClass>); // このあたりの書き方が(4)

(1)以外はたまたま動いたということでしょうか?なお、(2)(4)は

IntelliSense: コンストラクター "std::packaged_task<_Ret (_ArgTypes...)>::packaged_task [代入_Ret=int, _ArgTypes=<MyClass &>]" のインスタンスが引数リストと一致しません
引数の型: (<unknown-type>)
みたいな警告が出ますが、実行できます。
threadって難しいですね。さっぱりわからない。

548さんの方法ではVS2013C++ではエラーでビルドできませんでした。
error C2664: 'void std::packaged_task<int (MyClass &&)>::operator ()(MyClass &&)' :
引数 1 を 'MyClass' から 'MyClass &&' へ変換できません。
c:\program files (x86)\microsoft visual studio 12.0\vc\include\xrefwrap 58 1

とにかくいろいろありがとうございました。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。