如何在结构中声明类模板并在以后初始化?

时间:2019-02-04 17:16:53

标签: c++ c++11 random

我正在尝试对公差叠加进行建模。我制作了一个结构Layer,该结构保留公差范围的下限(tol[0])和上限(tol[1])。我想在tol[0]tol[1]之间生成一个随机值,并将其分配给val

我的实现在结构中声明了uniform_real_distribution类模板,并在main()中对其进行了初始化,但是我在编译过程中遇到错误,使我觉得我不能以这种方式使用类模板。 / p>

#include <random>

struct Layer {
    double tol[2];
    double val;
    std::string name;
    std::uniform_real_distribution<double> distribution;
};

int main() 
{
    Layer block;
    block.tol[0] = .240;
    block.tol[1] = .260;

    std::default_random_engine generator;
    block.distribution(block.tol[0],block.tol[1]);
    block.val = block.distribution(generator);

    return 0;
}

我从g ++中收到以下错误:

error: no match for call to '(std::uniform_real_distribution<double>) (double&, double&)'
    block.distribution(block.tol[0],block.tol1[]);
                                                ^

我已经创建了很多Layer结构,因此我希望将发行版与struct相关联,但是我不确定是否有可能。

1 个答案:

答案 0 :(得分:0)

在此阶段,对象已被构造,因此您可以执行以下操作:

block.distribution = std::uniform_real_distribution<double>(block.tol[0],block.tol[1]);

您还可以直接初始化结构:

Layer block{{.240,.260}, 0, "", std::uniform_real_distribution<double>(.240, .260)};