Sử dụng template và tham chiếu mảng (array reference) để suy diễn kích thước các chiều tại compile-time.
Kỹ thuật
- Template cho mảng 1 chiều:
template<typename T, size_t N> void f(T (&)[N]). - Template đệ quy cho mảng đa chiều: tách chiều đầu và gọi lại cho chiều còn lại.
Ví dụ mã
#include <iostream>
using namespace std;
// Cơ sở: mảng 1 chiều
template <typename T, size_t N>
void printDimensions(const T (&)[N]) {
cout << N;
}
// Đệ quy: mảng 2 chiều trở lên
template <typename T, size_t N, size_t M>
void printDimensions(const T (&a)[N][M]) {
cout << "Kích thước mảng: " << N << " x ";
printDimensions(a[0]); // gọi phiên bản 1 chiều cho hàng đầu tiên
}
int main() {
int a[6][7];
printDimensions(a);
return 0;
}
Kết quả
Kích thước mảng: 6 x 7
Kỹ thuật này chỉ hoạt động với mảng tĩnh (kích thước biết tại compile-time), không áp dụng cho con trỏ hoặc mảng động.