使用std :: future延迟评估表达式

时间:2017-03-18 00:51:05

标签: c++ c++11 future expression-templates

我有一个名为Expr的类,它使用表达式模板方法,可以用来构建这样的表达式:

Expr<int,Mat<int>> v(Mat<int>(10,10));
v(0,0)*3 + v(2,1)*v(1,2) >> val;

在调用operator>>(T& val)时评估表达式,即遇到>>时。我们假设一个eval函数计算一个表达式,并在operator>>(T& val)中调用,Expr类在void operator>>(T& val) { eval(val); } 类中定义:

operator>>

现在,我想通过介绍期货来进一步推迟评估,直到用户需要结果。因此,我将void operator>>(T& val) { handle_ = std::async(std::launch::deferred, [&val,this]() { eval(val);}); } 修改为:

std::future<void> handle_

问题是如何/在何处声明Expr以便我们以后可以轻松访问它。目前它在全球宣布,我不喜欢它。理想情况下,我希望将未来作为Expr<int,Mat<int>> v(Mat<int>(10,10)); v(0,0)*3 + v(2,1)*v(1,2) >> val; ... // other stuff v.get(); // now, val can be accessed 类中的成员,以便我可以这样做:

v.get()

此处,handle_.get()会在内部调用operator>>。但是,这是不正确的,因为调用get()的对象未存储在任何位置,我正在尝试在Expr的单独实例上调用Group Leader Groupmate Gender Groupmate Gender Groupmate Gender Leader 1 John M Mary F Linda F Leader 2 KK F Johanna F Leader 3 Rick M ,这将导致错误。

请建议。

0 个答案:

没有答案