如何为Template变量给定随机值

How give random value for Template variable?

本文关键字:随机 变量 Template      更新时间:2023-10-16

我正在构建一个矩阵类,它允许用户指定数据的类型。我希望能够根据模板为矩阵中的每个位置分配随机值。

如果模板是double,我想要一个double随机值,如果是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 s的结构,这样我就可以表示RGB图像。是否有某种方法可以提取任意结构或类中的所有可用数据成员,并为其分配一个随机值?

很抱歉我说得太多了,我想把我想做的事情说清楚。-谢谢。

只需调用每种类型上重载的函数:

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.