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 から良い回答を得ました。回答については、https://stackoverflow.com/questions/10831003/effective-boost-distribution-usage を参照して ください

于 2012-05-31T13:01:27.143 に答える