2015-04-04 70 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