0

给定类定义如下:

struct A {
   std::vector<int> aList;
   A() {
     for (int i = 0; i < ARRAY_LENGTH; i++)
       aList.push_back(0);
   }
}

程序的其他部分需要 A 的无参数构造函数。是否可以让 ARRAY_LENGTH 变化(比如从外部文件读取/从 gui 修改),这样

  • 步骤 0:ARRAY_LENGTH = 10
  • 步骤 1:创建 A 的对象,aList.size() 初始化为 10。
  • 第二步:使用A的新创建的对象
  • 步骤 3:删除 A 之前创建的所有对象
  • 步骤 4:使用不同的 ARRAY_LENGTH 值重复步骤 0 到 4,直到程序结束

ARRAY_LENGTH 的修改应该来自外部文件,或者由 gui 修改。并且程序的任何其他部分都不应该对该值具有写访问权。我怎样才能达到这个要求?

编辑:为了销毁现有对象,它将由程序的其他部分处理

编辑(2):我正在做一个模拟项目,A类中的aList代表家庭规模的可能pdf值。(假设 aList[0] = 0.5,aList[1] = 0.2,aList[3] = 0.3)。只有在程序运行不同的场景时才会发生最大家庭大小的变化,这意味着我将破坏以前创建的 A 对象以重置模拟。

4

2 回答 2

0

其中一种方法是您可以使用外部 xml 文件来指定 ARRAY_LENGTH 的值;但这将涉及在代码中包含 xml 文件并对其进行解析以获取变量 ARRAY_LENGTH 的值的开销

例如,您的 xml 文件可能如下所示:-

< xml version="1.0" encoding="UTF-8" standalone="no" ?> 
-< root>
        < LEN_VAR ARRAY_LENGTH=10/>
< /root>

然后,您需要在代码中包含并编译 C/c++ 的 xml 解析器。(可以免费获得各种解析器:例如http://biocpp.sourceforge.net/download/xmlParser.cpp)然后您必须在创建此类的对象之前获取值 ARRAY_LENGTH。

您可以更改 xml 代码中的值而无需重新编译。

将修改通知存档将让您知道您的值何时更改,并且一旦您从 XML 文件中重新读取新值,您的程序就可以继续使用新值。我不确定您使用的是什么平台,但您可以查看如何在 linux 中创建文件侦听器?如何让我的程序监视 C++ 中的文件修改?用于通知文件更改。

于 2013-03-21T07:36:43.567 回答
0

我不确定您对无参数构造函数的要求,这似乎是一个设计弱点,但这是评论中建议的静态默认长度方法的实现

struct A {
   private static DefaultLength=ARRAY_LENGTH;

   public static ResetDefault(int newDefault) {
         DefaultLength=newDefault;
   }

   std::vector<int> aList;

   A() {
     for (int i = 0; i < DefaultLength; i++)
       aList.push_back(0);
   }
}

这种性质的对象将正确释放。

于 2013-03-21T07:23:48.417 回答