【问题标题】:How give random value for Template variable?如何给模板变量随机值?
【发布时间】:2015-04-04 23:50:49
【问题描述】:

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

如果模板是 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 图像。有没有办法提取任意结构或类中的所有可用数据成员,并为其分配一个随机值?

对不起,我很抱歉,我想清楚地说明我想做什么。 -谢谢。

【问题讨论】:

    标签: c++ templates matrix types


    【解决方案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.
    

    【讨论】:

    • 让编译器为我们完成工作。这太棒了。你对我这边的 Node.js 有什么建议吗? IE。获取任意结构或类中的所有数据成员并为其赋值?
    • @nnrales C++ 没有反射,所以没有自动化的方法来做这样的事情。
    • 好的。我不知道反射,所以我会查一下。感谢您的帮助!。
    • 如果你不介意的话,能给我一个支持反射的语言的例子吗?
    猜你喜欢
    • 2020-07-09
    • 2017-07-11
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 2021-06-03
    • 2017-09-21
    相关资源
    最近更新 更多