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

统计分布类型的C++模板使用,c++,class,templates,montecarlo,C++,Class,Templates,Montecarlo,这是另一个问题的后续问题 我计划使用模板实现一个统计分布类。 我想使分发成为实体类的属性。这个分布类可以采用几种不同的形式-三角形分布、正态分布和加权分布,但这些只有在运行时才知道。它们共享大多数方法,但每种类型也可能有一些自定义方法,例如正态分布的setMean,加权分布的setWeights 我理解,C++模板是指一种类型,然后用来确定使用哪个实现。有人建议我使用模板实现不同的分发类型 虽然我想我理解C++模板的概念,但我不确定如何去实现它们来解决这个分布问题。我是否使用模板特殊化创建以下内

这是另一个问题的后续问题

我计划使用模板实现一个统计分布类。 我想使分发成为实体类的属性。这个分布类可以采用几种不同的形式-三角形分布、正态分布和加权分布,但这些只有在运行时才知道。它们共享大多数方法,但每种类型也可能有一些自定义方法,例如正态分布的setMean,加权分布的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
    }
};
这就需要为每个分发类型创建许多类型。 伙计们。 皮特

检查Boost是如何做到的:


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

从Rob Kennedy那里得到了如何实现boost正态分布包装的好答案。看见

如果这些在运行时已知,那么模板不适合您,模板在编译时使用已知的类型。您能解释一下原因吗?当我说“在运行时”时,我的意思是简单地在main中创建模板类。那么,您使用的术语运行时是错误的。根据这个定义,不是所有的东西都是在运行时的吗?比如,运行时定义,根据这样的东西:如果x{x*x=newX;}唯一的定义是x,它不是在运行时的。无论如何,与其在技术上浪费时间,不如在问题中添加一个代码示例,说明您实际希望如何使用这些发行版?感谢K-ballo,我本来打算使用boost发行版,但希望将它们封装在我的类中以简化对象模型。