-2
我想乘數組A,B。這些數組的大小是固定的。我推斷他們的大小與模板。現在我想爲C分配一些等於A * B的內存。我的問題是,當我做(N = 3,L = 5)爲多維數組分配內存
int (*C)[N][L] = new int[N][L]
我得到
error: cannot convert ‘int (*)[5]’ to ‘int (*)[3][5]’ in initialization
。
我做了一個解決方法,但仍然想知道如何在沒有解決方法的情況下執行此操作。
template<int N, int K>
struct matrix {
int array[N][K];
};
template<int N, int K, int L>
int (&multiply(int (&A)[N][K], int (&B)[K][L]))[N][L] {
matrix<N,L> *mat = new matrix<N,L>();
int (&C)[N][L] = mat->array;
return C;
}
int main() {
int A[3][4];
int B[4][5];
int (&C)[3][5] = multiply(A, B);
}
可以使其他解決方案與typedef
或reinterpreted_cast
但爲什麼你需要他們?這就像是C++本身的失敗,語言未能實現所承諾的內容。它類似於Java中的泛型。你認爲像List<T>
這樣的容器會更好地瞭解,但他們在鑄造和@SuppressWarnings
時也遵循同樣的錯誤方式。
你的「解決方法」看起來像內存泄漏給我。如果你正在創建一個矩陣類,給它正確的值語義。只需實現一個老式的乘法運算符,該運算符需要兩個矩陣並返回一個新的矩陣。 – juanchopanza 2014-11-01 13:16:19
簡單地使用['std :: array'](http://en.cppreference.com/w/cpp/container/array)怎麼樣? – 2014-11-01 13:20:27
類似'std :: array,N>'會更加優化。 –
2014-11-01 13:20:50