是否可以初始化頭文件中的靜態特徵矩陣4d?我想用它作爲一個全局變量。C++ Eigen初始化靜態矩陣
我想沿着線做一些事情:
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};
這裏是一個link的特徵矩陣文檔。我似乎無法從那裏找到如何做到這一點。
是否可以初始化頭文件中的靜態特徵矩陣4d?我想用它作爲一個全局變量。C++ Eigen初始化靜態矩陣
我想沿着線做一些事情:
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};
這裏是一個link的特徵矩陣文檔。我似乎無法從那裏找到如何做到這一點。
上的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;
}();
Return value optimization需要照顧臨時,所以不用擔心額外的副本。
您可以使用初始化拉姆達這樣的:
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;
}();
更優雅的解決方案可能包括使用finished()。一旦設置了所有係數,函數就會返回''。
如:
static Eigen::Matrix4d foo = (Eigen::Matrix4d() << 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16).finished();
看起來很漂亮,但我得到'錯誤:轉換,從 '徵:: CommaInitializer <徵::矩陣<雙,4,4>>' 非標type''Eigen :: Matrix4d {aka Eigen :: Matrix}'requested}();' –
vsoftco
我得到錯誤:C2440:'initializing':無法從'Eigen :: CommaInitializer'到'Eigen :: Matrix 'with [Derived = Eigen :: Matrix ] class'Eigen :: Matrix的構造方法'被聲明爲'explicit'' –
@MattStokes小問題是'Matrix4d << a,b,c,...'的結果是類型的對象'CommaInitializ er',它不能轉換爲'Matrix4d'。 – vsoftco