c++で引数で与えられた関数をメンバ関数に格納するには
関数をクラスのコンストラクタで受け取り,そのクラスのメンバ関数に格納して,
そのクラスの好きな位置で呼び出すことができるようにしたいのですが,
以下のようなクラスを作ってみたところ,メンバ関数funcに
代入できませんでした.なにか解決策はありますでしょうか.
#include <iostream>
#include <functional>
#include <thread>
class myThread
{
public:
//与えられた関数を格納する関数ポインタ
template <class callable, class... arguments>
std::function<callable(arguments...)> (*func)(); // <ーーここの宣言の仕方が良くないのだと思うのだけれど...
//コンストラクタ.引数として,関数と任意長の引数を得る
template <class callable, class... arguments>
myThread(callable&& f, arguments&&... args)
{
std::function<typename std::result_of<callable(arguments...)>::type()> task(std::bind(std::forward<callable>(f), std::forward<arguments>(args)...));
this->func = task; // <ーーここで代入できない
}
//引数で与えられた関数を元にループを作る
void makeLoop()
{
while(true){
this->func();
}
}
//スレッドにて非同期実行を行う
void run()
{
std::thread th(&myThread::makeLoop, this);
}
};
//テスト用関数.引数を出力するだけ
void test(int arg)
{
std::cout << arg << std::endl;
return;
}
int main()
{
myThread thread1(test, "hello");
return 0;
}
よろしくお願いします.