统计分布类型的C ++模板用法

时间:2012-05-26 01:51:41

标签: c++ class templates montecarlo

这是另一个问题(https://stackoverflow.com/questions/10712659/c-class-design-for-monte-carlol-simulation

的后续内容

我计划使用模板实现统计分布类。 我想让Distribution成为Entity类的属性。此Distribution类可以采用几种不同的形式 - TriangleDistribution,NormalDistribution和WeightedDistribution,但这些只在运行时才知道。它们共享大多数方法,但每种类型也可能有一些自定义方法,例如。 setMean用于NormalDistribution,setWeights用于WeightedDistribution。

据我了解,C ++模板引用了一个类型,然后用于确定要使用的实现。有人建议我使用模板实现不同的分发类型。

虽然我认为我理解C ++模板的概念,但我不确定如何实现它们以解决此分发问题。我是否使用模板专业化创建类似以下的内容?:

template <WeightedDistribution>
class Distribution {
    WeightedDistribtion wd;
  public:
    Distribution () {}
    double sample () {
      // Custom implementation of sample
      // for weighted distribution
    }
};

// class template specialization:
template <>
class Distributionr <NormalDistribution> {
    NormalDistribtion nd;
  public:
    Distribution () {}
    double sample ()
    {
      // Custom implementation of sample for 
      // a normal distribution
    }
};

这将需要为每种分发类型创建多种类型。 TIA伙计们 皮特

2 个答案:

答案 0 :(得分:0)

检查提升的执行方式:http://www.boost.org/doc/libs/1_49_0/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists.html

如果你足够幸运,你可能不需要实施任何东西。

答案 1 :(得分:0)

如何从Rob Kennedy实现boost的正态分布包装得到了一个很好的答案。看到 https://stackoverflow.com/questions/10831003/efficient-boost-distribution-usage for answer