我有一个名为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
,这将导致错误。
请建议。