首页 > 解决方案 > 如何在结构中声明类模板并稍后初始化?

问题描述

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

我的实现uniform_real_distribution在结构中声明了类模板并将其初始化main(),但我在编译过程中遇到错误,这让我认为我不能以这种方式使用类模板。

#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我创建的结构,所以我希望将分布与结构相关联,但我不确定它是否可能了。

标签: c++c++11random

解决方案


在这个阶段,对象已经构造好了,所以你可以这样做:

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)};

推荐阅读