2016-12-06 61 views
2

我試圖做這樣的事情:矢量決定在運行時

int x=128, y=256; 
std::vector<std::array<float,x*y>> codes; 

這顯然是錯誤的,而這是正確的:

std::vector<std::array<float,128*256>> codes; 

一個解決方案第一個問題可能是使用宏,如:

#define x 128 
#define y 256 
... 
std::vector<std::array<float,x*y>> codes; 

但我不知道是否有在運行時另一種解決方案和不是編譯時。 注意事項沒有必要使用std::array,我需要一個std::vector數組(或其他)x*y元素。

回答

3

嘗試使用const

const int x = 128; 
const int y = 256; 
... 
std::vector<std::array<float,x*y>> codes; 

在你的第一個代碼的問題是事實,xy不是常數,因此編譯器可以不依賴於一個事實,即它們的值不會在運行時改變,因此,在編譯時無法確定模板參數值。

+2

可能我建議'constexpr'?這樣,如果您嘗試從運行時值中獲取'x'和'y',那麼您將在此時獲得編譯器投訴,而不是在您實例化'codes'時。 – user975989

+0

Voilà,它的工作!謝謝!無論如何,因爲'x'和'y'是用戶在運行時決定的,我們可以在不初始化的情況下聲明它們,並在第二時刻(當用戶插入值,即128和256)時執行它? – justHelloWorld

+0

@ user975989同意'constexpr'在這裏可能更好。手頭沒有新的編譯器來檢查。 – alexeykuzmin0