Multithreading 在c++11中使用打包的_任务实现可运行

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是否是正确

我试图在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