1

我正在尝试使用 packaged_task 在 c++11 中创建一个 Runnable 接口,其中子类覆盖 run() 函数。我不知道为什么这段代码没有编译。它给出与类型参数相关的错误。

/usr/include/c++/4.8.1/functional:1697:61: 错误:在'class std::result_of()>' typedef typename result_of<_Callable(_Args...)> 中没有名为'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;
}
4

0 回答 0