我正在尝试使用 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;
}