我希望使用结构来创建一个数据类型,该数据类型包含结构本身的数组的其他引用或另一种类型的结构。当引用具有相同的泛型类型时,使用模板显然会导致类型本身的无限声明。我当前的解决方案是显式声明另一个结构类型及其本身的结构类型。我想知道是否有更聪明的解决方案(使用结构)。
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];
};
答案 0 :(得分:1)
这确实是C语言,但是只要您只需要指针,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
};
答案 1 :(得分:0)
如果要使用A或B(或C ...)类型的变量,则可以使用C ++ 17中引入的std::variant类型,或者使用其自定义实现编译器不支持。 This就是它的外观。
对于简单的情况,您也可以使用联合手动进行操作,尽管首选库解决方案。如果您要专门使用仅基于联合/结构的解决方案,建议您将问题引向C
而不是C++
。
但是,您似乎正在尝试创建某种树状结构。对于C ++中的此类结构,我发现简单继承最有效。