2015-04-04 96 views
0

我正在構建一個矩陣類,它允許用戶指定數據的類型。即使用模板。我希望能夠根據模板爲矩陣中的每個位置分配隨機值。如何爲模板變量賦予隨機值?

如果模板是雙倍的,我想要一個雙隨機值,如果它是int,我想要一個int隨機值。有沒有辦法做到這一點?

代碼:

template <class T> 
void matrix<T>::randFill(T start , T end){ 
    std::srand(time(0)); 
    for(size_t i = 1; i <= _rows ;i++){ 
    for(size_t j = 1; j <= _cols l i++){ 
     _matrix[(i-1)*_cols + (j-1)] = static_cast<T>(std::rand % (end - start) + 1) 
     } 
    } 
} 

我的問題真的是我怎麼能知道型板T將是什麼在運行時和變更結果相應地?有沒有辦法做一些像switch語句一樣的模板類型與特定的預定義類型並給出相應的值?這是一種天真的方式,但是在C++中有這樣的功能嗎?我知道typeid運算符,但我無法弄清楚如何去做。你能給我一個啓發來做到這一點?只要指出我正確的方向,我就會完成剩下的工作。

一邊注意。在將來,我希望我的矩陣類能夠採用3 int的結構,以便我可以表示RGB圖像。有什麼方法可以提取任意結構或類中的所有可用數據成員,併爲其分配一個隨機值?

對不起,我想清楚地知道我想做什麼。 - 謝謝。

回答

1

只需撥打重載每個類型的函數:

for(size_t i = 1; i <= _rows ;i++){ 
    for(size_t j = 1; j <= _cols l i++){ 
     set_random(_matrix[(i-1)*_cols + (j-1)]); 
    } 
} 

有了:

void set_random(int& val) { val = ... } 
void set_random(double& val) { val = ... } 
void set_random(char& val) { val = ... } 
// etc. 
+0

使編譯器做的工作我們。太棒了。你有沒有針對我的邊節點的指針?即。讓所有的數據成員在一個任意的結構或類中併爲它們賦值? – nnrales 2015-04-04 23:57:05

+1

@nnrales C++沒有反射,所以沒有自動化的方法來做這樣的事情。 – Barry 2015-04-05 00:00:51

+0

好的。我不知道反射,所以我會查找它。謝謝您的幫助 !。 – nnrales 2015-04-05 00:06:29