4 return std::visit([seed](
auto&& c) -> std::unique_ptr<IMarginalDistribution> {
5 using T = std::decay_t<
decltype(c)>;
6 if constexpr (std::is_same_v<T, FlatMarginalCfg>)
7 return std::make_unique<FlatMarginal>(c.a, c.b, seed);
8 else if constexpr (std::is_same_v<T, GaussianMarginalCfg>)
9 return std::make_unique<GaussianMarginal>(c.mu, c.sigma, seed);
10 else if constexpr (std::is_same_v<T, SplitGaussianMarginalCfg>)
11 return std::make_unique<SplitGaussianMarginal>(c.mu, c.sigma_p, c.sigma_m, seed);
12 else if constexpr (std::is_same_v<T, LikelihoodMarginalCfg>)
13 return std::make_unique<LikelihoodMarginal>(c.values, c.weights, seed,
true);
static std::unique_ptr< IMarginalDistribution > create(MarginalType name, MarginalConfig cfg, unsigned int seed=std::random_device{}())
Creates a concrete marginal-distribution object.