2015-11-03 17 views
0

我有一個結構體,它包含有關動畫的一些信息,我希望能夠用二維數組初始化結構體,而無需先創建和初始化數組。將二維數組傳遞給在C++中使用括號表示的方法的問題

我的動畫結構的構造如下:

Animation(int frames[][2], int count); 

我要實現的是這樣的:

Animation* m_PlayerAnimation = new Animation({ { 3, 9 }, { 11, 9 }, { 19, 9 } }, 3); 

我知道這是可能如下,但是我正在尋找一個1行解決方案:

int arr[][2] = { { 3, 9 }, { 11, 9 }, { 19, 9 } }; 
Animation* m_PlayerAnimation = new Animation(arr, 3); 

在此先感謝!

+2

使用'的std :: array'代替 – 101010

回答

3

問題在於你有參數int frames[][2],frames是一個指針。所以你不能在那裏創建一些東西,因爲它不會是一個指針。這是從C

緩繳如果你想能夠就地創建一個任意數組,你必須你的構造函數更改爲:

template <size_t N> 
Animation(const int (&frames)[N][2]) { .. } 

,它可以讓你寫:

Animation a({{0,1}}); 

此時,參數count變得多餘,因爲它被模板參數N取代。

或者,你可以只使用vector

Animation(std::vector<std::array<int, 2>> const& v) { .. } 

可以使用相同的方式:

Animation a({{0, 1}}); 
+0

我認爲後者的做法是可取的,因爲它避免了冗餘'count'參數('count == v.size()')。另外,它避免了添加一個可以將構造函數定義移動到頭文件中的模板。 – Adam

+0

感謝您的回答,我打算使用後者的說法,因爲如果我必須使用模板,那麼在使用我自己的內存管理時沒有性能增益,這實際上確實簡化了大量其他代碼:P –

相關問題