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
提案してください。