我正在构建一个矩阵类,它使用户可以指定数据的类型。即使用模板。我希望能够基于模板将随机值分配给矩阵中的每个位置。

如果模板是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的结构,以便可以表示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.

关于c++ - 如何给Template变量赋予随机值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29452669/

10-13 03:52