c++在类构造函数中重置默认数组长度
c++ reset default array length within class constructor
给定的类定义如下:
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++中监视文件修改?用于通知文件更改
- 初始化具有非默认构造函数的std::数组项的更好方法
- 是默认情况下分配给char数组常量的值
- 如何将数组部分初始化为某个默认值?
- 有没有一种代码密度较低的方法来使用非默认构造函数初始化数组?
- C++默认情况下,指针类型数组的元素是否保证初始化为 nullptr?
- Pybind11 默认参数 numpy 数组或 None
- c++ 中堆上数组的默认值是多少?
- 初始化在类类型 #define 中定义的非静态成员数组,不带默认 ctor
- C++ 创建不带默认构造函数的对象数组
- C++不同内存位置中的默认数组值
- 使用默认值初始化 std::数组
- 如何初始化可以设置为默认数组并将输入/输出作为数组的类函数?
- 默认情况下C++数组作为参数引用
- 对象成员数组C++默认初始化
- 固定大小和零启动数组作为C 11中的默认参数
- 在对象中创建对象数组时的默认构造函数
- 如何在默认构造函数中将 char 数组初始化为 null
- 用作函数参数时,将默认值设置为 C 数组
- 如何在默认和二维数组中找到顺序扩大元素的位置
- c++在类构造函数中重置默认数组长度