c++在类构造函数中重置默认数组长度

c++ reset default array length within class constructor

本文关键字:默认 数组 构造函数 c++      更新时间:2023-10-16

给定的类定义如下:

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

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

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

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

编辑:对于破坏现有对象,它将由程序的其他部分处理

编辑(2):我正在做一个模拟项目,a类中的list表示家庭规模可能的pdf值。(比如船向一边倾斜的[0]= 0.5,倾斜的[1]= 0.2,倾斜的[3]= 0.3)。最大家族大小的改变只会在程序运行不同的场景时发生,这意味着我会销毁之前创建的A对象来重置模拟。

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

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);
   }
}

一种方法是使用外部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++中监视文件修改?用于通知文件更改