2013-03-18 57 views
0

我正在使用一個模板類,我希望包含大小取決於模板參數的固定大小的數據數組。一個簡單的例子是具有模板參數相關大小的固定大小C數組

template<int D> 
class Foo 
{  
    private: 
     int m_array[D*(D+1)];    
}; 

雖然可變大小的C數組在一般理解的皺起了眉頭,在這裏,他們可能是合理的,因爲D小,這是很好的和明確的m_array多少價值持有(以及它不能改變尺寸)。我的問題是

  1. 這實際上是一個合理的使用變量大小的數組呢?
  2. 這是否總是不好的做法,因爲這些數組並未得到編譯器的普遍支持?
  3. 有沒有乾淨的選擇?人們可以使用std::vector並在構造函數中設置大小,我認爲這會使代碼變得不那麼清晰。是否最好使用C++ 11的std::array,從而將上例中的相關行更改爲std::array<int,D*(D+1)> m_array;
+5

1.'m_array'不是一個可變長度的數組。所以問題的其餘部分是沒有意義的。 – juanchopanza 2013-03-18 18:31:58

+0

他不是在詢問一般的可變長度數組,而是模板參數相關的數組大小。 – 2013-03-18 18:33:41

+2

@ user1654209 OP問題肯定是在詢問VLA,以及在這種情況下是否合理。 – juanchopanza 2013-03-18 18:35:28

回答

4

你的例子不是可變長度數組,就像C99中存在的那樣。在那裏,數組的大小隻有在運行時才知道。

在這裏,您使用編譯時常量來設置數組的大小。這樣做沒有問題。出去享受。

+0

但是,考慮使用'std :: array <>'而不是C數組。 – ildjarn 2013-03-20 17:00:55