C++でスレッドプールを作成しようとしています。概念は、mainは新しいTaskを作成し、ThreadPoolクラスはTaskオブジェクトを取得し、他の作業を実装するということです。これは、Taskクラスです:戻り値と変数テンプレートのバインド
私はそれを使用しようとしていますかtemplate<typename ... Arguments>
class Task{
//
public:
Task(std::function<void (Arguments...)> _func, Arguments... _args){
auto f1 = std::bind(_func, _args...);
f1();
};
void run(){
};
};
と、この:
#include <iostream>
#include <algorithm>
#include "Task.hpp"
void prtinhi(int a)
{
std::cout << a << std::endl;
return;
}
int main(){
Task<int> task(prtinhi, 5);
task.run();
return 0;
}
が明らかTaskオブジェクトは、ThreadPoolのに渡され、ThreadPoolのは、(実行を呼び出します)に従っていくつかの論理。 このコードは、print 5を正常に実行します。しかし、私が望むのは、f1()をrun()関数から呼び出すことです。私はクラスのメンバとしてauto f1
定義のそれぞれで独立し持っているTaskクラスを変更する場合、私はエラーを取得:
non-static data member declared ‘auto’
私はそれが静的宣言した場合、私はそれに値を割り当てることはできません。 どうすればこの問題を解決できますか?それを行うより良い方法はありますか?
おそらく 'decltype'ですか? – DavidW
私はここでdecltypeが私を助けることができません... –