我希望使用结构创建一个数据类型,该数据类型包含结构本身或其他类型的结构的其他引用。当引用类型相同时,使用模板显然会导致类型本身的无限声明。我当前的解决方案是明确声明另一种结构类型和本身的结构类型。我想知道是否有一个更聪明的解决方案(使用结构(。
struct Transform
{
float x;
float y;
float z;
float qx;
float qy;
float qz;
float qw;
};
struct Pattern
{
enum type{ linear, rectangular, circular };
char name[20];
int id;
Transform t[PATTERN_SIZE];
};
struct Group
{
enum type{ pattern, group };
char name[20;
int id;
Group *g[20];
Pattern *p[20];
};
它确实是c-ish,但是只要您只需要指针,void *
就是一个多用途指针:
struct Group
{
enum type{ pattern, group } t;
char name[20];
int id;
void *children[20]; // cast elements to `Group *` or `Pattern *` depending on t
};
如果要具有A型或B(或C ...(的变量,则可以使用C 17中引入的std ::变体类型,或其自定义实现,如果编译器不支持它。这就是它的外观。对于简单的情况,您也可以使用工会手动进行操作,尽管库解决方案是首选。如果您需要专门的联合/仅结构解决方案,我建议您将问题引导到C
而不是C++
。
但是,看起来您正在尝试创建某种类似树的结构。对于C 中的这样的结构,我发现简单的继承效果最好。