0

任意の Eigen-Vector/Array タイプのコンテンツを std::array に変換しようとしています。Eigen doc http://eigen.tuxfamily.org/dox/TopicFunctionTakingEigenTypes.htmlからこの部分を読んだので、これが私の関数です:

template<typename DERIVED>
std::array<typename Eigen::DenseBase<DERIVED>::Scalar, Eigen::DenseBase<DERIVED>::RowsAtCompileTime>
toStl (const Eigen::DenseBase<DERIVED>& input)
{
... // Do conversion
}

問題は、コピーを取得するために入力パラメーターの型からアンパサンドを削除すると、空の入力変数が取得されることです。係数 0 の偽の値が含まれており、残りはゼロです。

パラメータを参照すると、すべて正常に動作します。理由を教えてもらえますか?

PS .: なぜ私がコピーを取りたいのか疑問に思われる方のために。オプティマイザを支援するために、この講演で提案されていますか: http://www.youtube.com/watch?v=eR34r7HOU14 (後半から終了まで)

4

1 に答える 1

3

DenseBase<> クラスは空の基本クラスであるため、その型のオブジェクトを作成しても意味がありません。したがって、本当に入力を値で渡したい場合は、その型を DenseBase ではなく DERIVED にする必要があります。それにもかかわらず、関数の唯一の目的が別のコピーを作成するのに値渡しするのは奇妙に思えます。

于 2013-06-30T18:51:08.547 に答える