2013-11-04 86 views
1

有沒有辦法在C++編譯時確保數組參數的長度?如此:在編譯時確保C++數組參數大小

void foo(T arr[3]); 

int main() 
{ 
    T a[5] = { /* ... */ }; 
    foo(arr); 
    return 0; 
} 

會產生編譯時錯誤嗎?

是確保這一點的唯一方法使用模板型,比如

template <int N, class T> 
struct Array{ 
    T arr[N]; 
}; 

void foo(Array<3, T> &arr); 

int main() 
{ 
    Array<5, T> a; 
    foo(a); 
    return 0; 
} 

還是有處理這種更習慣的方法?

+2

不要創建它。它已經爲你完成了:'std :: array' /'boost :: array'。不過,這是正確的解決方案。 – chris

+0

我剛剛發現,做了一些更深入的谷歌搜索。我似乎無法找到多維數組的解決方案。將一個C++ 11樣式的typedef是圍繞正確的方式: '模板使用array2d =陣列 ,N>' – user1569339

回答

2

您可以定義函數取一個參考,如果你真的想在編譯時錯誤:

void foo(T (&arr)[3]); 
+0

這似乎是在使用最節儉的溶液STL和模板。謝謝。我認爲這也適用於多維數組:'void foo(T(&arr)[3] [5]'? – user1569339

+0

哦,當然是這樣!第二個維度必須在編譯時確保,即使沒有引用陣列,應該更加考慮那個。 – user1569339