Multithreading 在c++11中使用打包的_任务实现可运行
我试图在c++11中使用打包的_任务创建一个可运行接口,子类重写运行函数。我不知道为什么这段代码没有编译。它的给定错误与类型参数有关 /usr/include/c++/4.8.1/functional:1697:61:错误:在“class std::result\u of>”中没有名为“type”的类型 typedef typename result_of::type result_type 下面是我的代码片段。有没有人能告诉我一些关于这个错误的信息,以及以这种方式实现Runnable是否是正确的方法Multithreading 在c++11中使用打包的_任务实现可运行,multithreading,c++11,future,packaged-task,Multithreading,C++11,Future,Packaged Task,我试图在c++11中使用打包的_任务创建一个可运行接口,子类重写运行函数。我不知道为什么这段代码没有编译。它的给定错误与类型参数有关 /usr/include/c++/4.8.1/functional:1697:61:错误:在“class std::result\u of>”中没有名为“type”的类型 typedef typename result_of::type result_type 下面是我的代码片段。有没有人能告诉我一些关于这个错误的信息,以及以这种方式实现Runnable是否是正确
class Runnable {
public:
explicit Runnable() {
task_ = std::packaged_task<int()>(&Runnable::run);
result_ = task_.get_future();
std::cout << "starting task" << std::endl;
}
virtual int run() = 0;
int getResult() {
task_();
return result_.get();
}
virtual ~Runnable() {
std::cout << "~Runnable()" << std::endl;
}
private:
std::future<int> result_;
std::packaged_task<int()> task_;
};
class foo : public Runnable {
int fib(int n) {
if (n < 3) return 1;
else return fib(n-1) + fib(n-2);
}
public:
explicit foo(int n) : n_(n) {}
int run() {
cout << "in foo run() " << endl;
int res = fib(n_);
cout << "done foo run(), res = " << res << endl;
return res;
}
~foo() {}
private:
int n_;
};
int main(int argc, char*argv[]) {
stringstream oss;
oss << argv[1];
int n;
oss >> n;
shared_ptr<foo> obj(new foo(n));
obj->run();
cout << "done main" << endl;
return 0;
}
给出打包的任务std::bind&Runnable::run,而不是仅仅&Runnable::run