Как объявить шаблон класса в структуре и инициализировать позже? - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь смоделировать набор допусков.Я создал структуру Layer, которая содержит нижний предел (tol[0]) и верхний (tol[1]) предел диапазона допуска.Я хочу сгенерировать случайное значение между 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[]);
                                                ^

IУ меня довольно много Layer структур, которые я создаю, поэтому я надеялся связать дистрибутив со структурой, но я не уверен, что это возможно.

1 Ответ

0 голосов
/ 04 февраля 2019

На этом этапе объект уже построен, поэтому вы можете сделать:

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