網絡連接有一個矩陣類的一個模板:初始化矩陣類括號,同時類型安全
template<typename T, int rows, int cols>
struct Matrix{
public:
Matrix() {
if (rows == cols)
LoadIdentity();
}
T data[rows][cols];
void LoadIdentity(){ }
/* more methods ... */
}
template<int rows, int cols>
using matrixf = Matrix<float, rows, cols>;
template<int rows, int cols>
using matrixd = Matrix<double, rows, cols>;
,我希望能夠初始化這個類,如:
void main(){
matrixf<2, 3> m2x3 = { { 1, 2, 3 }, {4, 5, 6} };
}
如果我試試這個,編譯器說:
E0289沒有構造函數「vian :: Matrix [with T = float,rows = 2,cols = 3]」的實例匹配參數列表
如果我刪除我的默認構造函數,我得到我想要的行爲,但我失去了任何構造函數的可能性。
Matrix() { ... } // If I remove this, I have the behaviour I want
一個solution I found是創建一個構造函數的的std :: initializer_list,但如果我這樣做,編譯器不會檢查initialier名單有觀點的權利量爲N×M大小的矩陣。
編輯:添加LoadIdentity方法,以便編譯。
'void main' - >這是C++嗎? –
我們這個代碼的用例是什麼? –
'Matrix(std :: array,rows>)''? –
Jarod42