ヘッダーファイルで静的固有行列4dを初期化することは可能ですか?グローバル変数として使いたいです。
次のようなことをしたいのですが。
static Eigen::Matrix4d foo = Eigen::Matrix4d(1, 2 ... 16);
またはベクトルに似ています:
static Eigen::Matrix4d foo = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
これが リンク 固有行列のドキュメントです。そこからこれを行う方法を見つけることができないようです。
Dawidの回答(小さな問題があります。コメントを参照してください)の行で、次のことができます。
static Eigen::Matrix4d foo = [] {
Eigen::Matrix4d tmp;
tmp << 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16;
return tmp;
}();
戻り値の最適化 一時的な処理を行うため、余分なコピーの心配はありません。
より洗練された解決策には、 finished() の使用が含まれる場合があります。この関数は、すべての係数が設定されると、構築された行列を '返します。'
例えば:
static Eigen::Matrix4d foo = (Eigen::Matrix4d() << 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16).finished();
次のように初期化ラムダを使用できます。
static Eigen::Matrix4d foo = [] {
Eigen::Matrix4d matrix;
matrix << 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16;
return matrix;
}();