包含对自身或其他结构类型的引用的结构吗?

时间:2019-05-20 10:46:02

标签: c++ c++11 data-structures nested

我希望使用结构来创建一个数据类型,该数据类型包含结构本身的数组的其他引用或另一种类型的结构。当引用具有相同的泛型类型时,使用模板显然会导致类型本身的无限声明。我当前的解决方案是显式声明另一个结构类型及其本身的结构类型。我想知道是否有更聪明的解决方案(使用结构)。

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];
};

2 个答案:

答案 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 ++中的此类结构,我发现简单继承最有效。