4

Eigenマトリックスライブラリを使用するコードを使用しています。そのコード全体を通して、次のようなアクセサーがあることに気づきました。

RowVector3f V(size_t vertex_index) const
{
    return mymatrix.row(vertex_index);
}

const refを返すアクセサーを使用する方が良いのではないでしょうか?それはEigenで可能ですか?または、内部フロートへのポインタを行の先頭に戻し、それをベクトルにキャストします(もちろん、行の主要なレイアウトが一致していると仮定します)。

4

2 に答える 2

4

Eigenでは、mymatrix.row(vertex_index)はブロックを返します(mymatrixがMatrix3fであると想定)。ブロックオブジェクトは、基本的に元のデータへのポインタです。あなたの場合、このプロキシはRowVector3fにコピーされます。幸い、このような小さな固定サイズのオブジェクトの場合、コンパイラはこの余分なコピーを簡単に最適化できます。だから私は気にしません。

より一般的なケースでは、Vメソッドを書き直してMatrixXf :: RowXpr(Block <...>の適切なtypedef)を返します。

于 2012-12-17T13:25:44.003 に答える
-1

私はこのライブラリを知りませんが、その手法、つまりオブジェクトを返し、参照ではなく値で返すという手法を使用しました。これはセキュリティのためです。元のデータの一部を値で返す場合、元のデータを変更することはできません。

また、データへのポインタの代わりにオブジェクトを使用すると、コードがより構文にわかりやすく、高レベルになります。

于 2012-12-17T10:35:15.467 に答える