我对结构的定义如下:

typedef struct decls  *Decls;
typedef struct expr   *Expr;
struct decls {
    Decl      first;
    Decls     rest;
};
struct exprs {
    Expr first;
    Exprs rest;
};

我定义了一个函数来获取Decls的长度
static int list_length(Decls decls) {
    if (decls) {
        return 1 + list_length(decls->rest);
    } else {
        return 0;
    }
}

如何在不定义另一个副本的情况下使此函数泛型以获取表达式的长度?

最佳答案

使用泛型列表,并在第一部分中存储指向对象(Expr或Delc)的指针,然后首先转换为指向要使用它的适当类型的指针。

struct list {
    void *first;
    struct list *rest;
};

static int list_length(struct list *l) {
    if (l) {
        return 1 + list_length(l->rest);
    } else {
        return 0;
    }
}

10-06 09:12