式テンプレートがEigenでどのように機能するかを理解したいと思います。 私は2つの力学のダブルベクトルの和は、このようなものによって実行されていることがわかる:私はまた、2つのベクトルの違いがどのように実装されるか理解Eigenの式テンプレート
CwiseBinaryOp< internal::scalar_sum_op<double>, VectorXd const, VectorXd const > operator+(VectorXd const & lhs, VectorXd const & rhs);
。
私には2つの質問があります。
1.スカラー演算によるベクトルの積はどのようになりますか?
私は
CwiseBinaryOp< internal::scalar_product_op<double>, VectorXd const, VectorXd const >
が存在するが、私は唯一の2つのベクトル間の要素ごとの操作を実行するように設計されていることを感じを持っていることに気づきました。それは、スカラー、ベクトルの積は、単項演算子に対応
がCwiseUnaryOp< internal::scalar_product_op<double>, VectorXd const, VectorXd const > ?
2.式が混在運用から構築されたテンプレートことができると言うことを意味するのでしょうか?例えば
は、
x = u + (2*v + (v-w))
のような式では、これらの動作は、このようなネストされた方法で実行されていることは事実ですか?
v-w
建設へのE3u + (2*v + (u-w))
リードのインスタンスの構築につながるE22*v + (v-w)
のインスタンスの構築につながるE12*v
のインスタンスの構築につながりますE4のインスタンスの例x = u + (2*v + (v-w))
コール
コンストラクタ
VectorXd(E4 const &);
または以下の別名で、前のステップから構築されたツリーを評価し
VectorXd & operator=(E4 const &);
をオーバーロード:
using diff = internal::scalar_difference_op<double>;
using prod = internal::scalar_product_op<double>;
using sum = internal::scalar_sum_op<double>;
using E1 = CwiseBinaryOp< diff, VectorXd const, VectorXd const >;
using E2 = CwiseUnaryOp< prod, VectorXd const >;
using E3 = CwiseBinaryOp< sum, E1 const, E2 const >;
あなたの答えをありがとうございました! – Aleph