2
當實現一個Matrix4
類模板(代表一個4乘4的矩陣)時,我遇到了這個類中的構造函數的問題。我試圖爲多維數組聲明有效的構造函數(,在這種情況下,二維數組又稱爲矩陣),但未能這樣做。這裏是我的構造函數都左值和右值引用多維數組:C++ 11 - 如何爲多維數組的右值引用提供一個有效的構造函數?
Matrix4(T (&matrix_)[4][4]);
Matrix4(T (&&matrix_)[4][4]);
這兩個聲明似乎是可以接受的,但調用構造函數以右值引用不能按預期工作:
// Works:
float matrix__[4][4] = {{0}};
Matrix4<float> matrix1__ = matrix__;
// Does not work:
Matrix4<float> matrix2__ = {
{0, 0, 7, 0},
{1, 0, 5, 0},
{0, 0, 4, 0},
{0, 0, 0, 2}
};
從一段代碼不工作,我得到以下錯誤:
error: could not convert '{{0, 0, 7, 0}, {1, 0, 5, 0}, {0, 0, 4, 0}, {0, 0, 0, 2}}' from '' to 'Matrix4'
那麼,如何提供有效的構造函數右值引用到多二維數組?
那麼這種剝離,似乎這樣的伎倆你的榜樣工作,巴掌。非常感謝!我有時討厭C++ 11編譯器似乎更喜歡使用大括號初始化列表而非傳統數組初始化列表。最好習慣這樣的語法。仍然比Matrix4更好 matrix2__ = {.data {...}}; :/ –
Helixirr