1

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

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

据我了解,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 伙计们。皮特

4

2 回答 2

0

检查Boost是如何做到的:http : //www.boost.org/doc/libs/1_49_0/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists.html

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

于 2012-05-26T01:56:35.807 回答
0

从 Rob Kennedy 那里得到了关于如何实现 boost 正态分布的包装器的一个很好的答案。请参阅 https://stackoverflow.com/questions/10831003/efficient-boost-distribution-usage 以获取答案

于 2012-05-31T13:01:27.143 回答