这是另一个问题 ( https://stackoverflow.com/questions/10712659/c-class-design-for-monte-carlol-simulation ) 的后续
我计划使用模板实现一个统计分布类。 我想让 Distribution 成为实体类的属性。此 Distribution 类可以采用几种不同的形式 - TriangleDistribution、NormalDistribution 和 WeightedDistribution,但这些仅在运行时已知。他们共享大多数方法,但每种类型也可能有一些自定义方法,例如。为 NormalDistribution 设置 Mean,为 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 伙计们。 皮特
最佳答案
检查 Boost 是如何做到的:http://www.boost.org/doc/libs/1_49_0/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists.html
如果足够幸运,您可能根本不需要实现任何东西。
关于统计分布类型的 C++ 模板用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10763046/