2012-02-02 31 views
1

下面的代碼示例顯示了什麼,我試圖做的:用靜態2d數組定義一個類的方便方法是什麼(並且2d數組的大小僅在編譯期間是已知的)?

template<int NX, int NY> 
class Array 
{ 
public: 
    float v[NX][NY]; 
}; 

void main() 
{ 
    Array<10,20> grid; 
} 

上面的代碼將無法編譯,但它顯示了我想做的事情。我們有一個包含數組的類,並且數組類在編譯時才知道它的大小。有沒有簡單的方法來做到這一點?

編輯:我想寫一個簡單的可重用的數組類。這意味着我需要找到一種將數組大小與類分開的好方法。

我也希望類是快速(和簡單),所以它不能動態分配。這意味着在運行時無法給出尺寸。

我也不想使用預處理器來定義大小,因爲這意味着我將不得不經歷更改某處的數字的麻煩。這不夠方便。

基本上,這個類直到編譯時才知道它自己的大小,因爲那是當main函數告訴類的大小。

編輯:上面的代碼是好的。

+0

不會編譯的唯一原因是'main'必須返回'int' - 除此之外,它是合法的代碼。 http://codepad.org/xKxBH2tJ – 2012-02-02 18:22:59

+1

另外,「直到編譯時」沒什麼意義 - 什麼時候有更早的時間? – 2012-02-02 18:23:40

回答

1

main以外不返回int,這是合法的代碼,應該編譯。事實上,在一些編譯器上,這個編譯器會在不返回main的情況下返回一個int,比如VC++但是this is non-standard behaviour

您還可以在編譯時存儲大小,以便您不必手動計算它。

#include <iostream> 

template<int NX, int NY> 
class Array 
{ 
public: 
    float v[NX][NY]; 

    int size() const { return ArraySize; } 

private: 
    enum { ArraySize = NX * NY }; // You can also store rows/cols individually 
}; 

int main() 
{ 
    Array<10,20> grid; 

    std::cout << grid.size(); 

    return 0; 
} 
相關問題