我正在构建一个矩阵类,它允许用户指定数据的类型。即使用模板。我希望能够根据模板为矩阵中的每个位置分配随机值。
如果模板是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图像。有没有办法提取任意结构或类中的所有可用数据成员,并为其分配一个随机值?
很抱歉,我很想知道我想做什么。 -谢谢。
答案 0 :(得分: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.