使用c ++静态类成员来控制所有类实例的“模式”

时间:2013-01-13 16:26:45

标签: c++ class constructor static-members

这是一个简单的问题,但我想就如何解决它提出建议。我有一个带有构造函数Policy的{​​{1}}类。

根据Policy::Policy(const int& mode)的值,mode对象可以具有不同的行为和特征。例如,假设有3种可能的模式来运行与Policymode=1mode=2相对应的程序。现在,任何时候都不会有mode=3个具有不同模式值的对象。

因此,对我来说,有一个变量Policy是有道理的,这样所有static int Policy::MODE个对象都知道它们应该在哪个模式下运行。创建的第一个Policy对象将在其构造函数中设置此静态类变量的值。然后,如果尝试使用不同的Policy创建任何其他Policy对象,则实例化将以错误退出(因为这不应该发生)

有关如何解决此问题的任何建议?

[以下针对评论请求添加的其他说明。]

该计划旨在优化疾病筛查政策。每个mode对象代表一个筛选策略,并具有许多必要的功能,以便跟踪反映在群体中实施该策略的影响的统计数据。在优化的说法中,每个筛选政策都是决策变量的向量,通过使用疾病的自然历史模型模拟政策来估计目标函数。

Policy对象需要能够无缝地适应多个复杂的优化框架。它不仅需要能够代表疾病筛查政策,还能够代表可用于测试优化算法是否运作良好的任何数量的标准测试问题。基于Policy类的MODE值更改的功能/特征如下:(1)用于评估策略的模拟模型,(2)构建器中设置的代码诸如决策变量向量的长度,以及(3)用于显示给定策略的信息及其估计性能的代码。

对于任何特定的模拟模型(即目标函数),存在多个“策略表达式”(即,决策变量的向量),其可以被解码为模拟模型所需的策略表达式。因此,每种“模式”代表一种表达筛选政策的方式与特定模拟模型的配对,以评估该政策。

如果只有两种不同的运行模式,那么这里就会出现很多不相关的东西:

Policy

在较高级别,您可以说每个模式值代表解决方案与估算器的配对。

1 个答案:

答案 0 :(得分:1)

你是否在寻求类似的东西:

static int Policy::MODE=-1;
Policy::Policy(const int& mode) {
  if (MODE==-1) {
    MODE=mode;
  }
  else {
    if (mode!=MODE) {
      cout <<"mode mismatch "<<...<<endl;
      exit (1); // or throw something, set some flags, depending on your needs
    }
  }
}