如何在子类中重新定义数组大小?

How can I redefine array size in a subclass?

本文关键字:定义 数组 子类 新定义      更新时间:2023-10-16

我有一个基类,在其中我定义了一个结构数组(基类型(和一些作用于其对象的方法;我从不直接实例化这个类,只是创建了它的变化子语言。现在,在每个子类中,我想根据子类的特定需求重新定义数组大小。

考虑到我想避免动态分配,以使程序更可靠,并且因为我喜欢在编译时看到我在设计中使用的内存量。

我尝试简单地重新定义子类中的数组;编译器(我使用 Arduino IDE(不会抱怨它,但是,从编译器报告的内存量来看,我看到实际上两个数组都存在(一个在基类中定义,一个在子类中"重新定义"(,所以这似乎不是这样做的方法。

我发现了一个关于使用模板的建议,但它没有得到太多的批准,因为我读到模板是关于让一个类管理不同的数据类型,我认为我只想要一个不同的数组大小的问题可以有一个更简单的解决方案。

获得我想要的东西的正确方法是什么?

这是我(错误(代码的示例:

typedef struct {
char val1;
int val2;
} DataItem;

class BaseClass {
DataItem dataItems[5];
};
class Sublass_A : public BaseClass {
DataItem dataItems[50];
};
class Sublass_B : public BaseClass {
DataItem dataItems[15];
};

使用模板,您可以执行以下操作:

template <std::size_t N>
class ItemsArray {
DataItem dataItems[N];
};
using classA = ItemsArray<50>;
using classA = ItemsArray<15>;

这是我问题的初始代码,根据@Jarod42的回答进行了更正。

typedef struct {
char val1;
int val2;
} DataItem;

template <size_t N = 5> // 5 is the default value if the size is not specified
class BaseClass {
DataItem dataItems[N];
};
class Sublass_A : public BaseClass<50> {
};
class Sublass_B : public BaseClass<15> {
};

它编译正确,并且在子类对象上使用 sizeof(( 进行测试报告数组的预期大小。