1

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

提案してください。

4

0 に答える 0