结构包含对自我或其他结构类型的引用



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

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 中的这样的结构,我发现简单的继承效果最好。

最新更新