是否可以定义具有可变大小的数组的结构。像这样的东西:
#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等,特别是指针不被接受,因为我们的遗留代码要求是普通的旧类型,因此可以很容易地处理赋值或复制。
答案 0 :(得分:5)
是的,可以这样做。您根本不需要命名结构,这使得宏更简单:
#define CHAR_ARRAY(MAX_LENGTH) struct {char data[MAX_LENGTH]; int length;}
(在您的示例中使用。)
但是,我仍然不完全清楚这个宏的用途,因为这实际上重新实现了现有功能。至少你应该使用模板而不是宏来为你生成类型:
template <std::size_t N>
struct char_array { char data[N]; std::size_t length; };
然后使元素类型通用:
template <typename T, std::size_t N>
struct array { T data[N]; std::size_t length; };
...现在这已经变得非常明显,这是std::array
的糟糕重新实施,并且不仅仅使用后者还有没有好处。