【发布时间】:2014-10-08 11:42:15
【问题描述】:
是否可以定义具有可变数组大小的结构。像这样:
#define CHAR_ARRAY(MAX_LENGTH) struct CHAR_ARRAY_#MAX_LENGTH{char data[MAX_LENGTH]; int length;};
因此,仅使用上述宏,我就可以定义不同的数据类型,如下所示。
struct Data{
CHAR_ARRAY(4) a;
CHAR_ARRAY(8) b;
};
由于现有代码的特殊要求,需要用“struct”定义的普通旧类型,不使用std::array,vector等。特别是指针不被接受,因为我们的遗留代码有要求普通的旧类型,因此可以轻松处理分配或复制。
【问题讨论】:
-
你不能将字符指针与大小字段一起使用吗?
-
你试过了吗?顺便说一句,您可能正在寻找
##,而不是#。 -
在 C++ 中你应该只使用
std::array<char, 4>它有一个size()方法。 -
@pepero 将
#更改为##,并从#define行的末尾删除;。然后它会工作。 -
关于你的编辑,你提到你不能使用
std::array,因为你需要一个POD类型:std::array<T, size>是一个POD,如果T是一个POD。
标签: c++ c macros c-preprocessor