1

如果我想创建一个以结构名称作为参数的函数,方法签名会是什么样子?

typedef struct Class{
} Class;

main()
{
    Class *a = malloc(Class);
    return instanceOf(a, Class);
}

声明instanceOf会是什么样子?

4

2 回答 2

7

您不能将类型传递给 C 中的函数。但是,您可以使用宏来模拟这种行为:

#define new_instance(t) (malloc(sizeof(t)))

Class *instance = new_instance(Class);
于 2012-05-13T11:30:52.117 回答
0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define type(x) #x

typedef struct Class{
    char* type;
} Class;

Class *Class_new(){
    Class *v;
    v=(Class*)malloc(sizeof(Class));
    v->type = "Class";
    return v;
}

void Class_free(Class *a){
    free(a);
}
int instanceOf(Class *a, const char* type){
    return strcmp(a->type, type) == 0;
}

int main(){
    Class *a = Class_new();
    printf("%s\n", instanceOf(a, type(Class)) ? "YES" : "NO");
    Class_free(a);
    return 0;
}
于 2012-05-13T12:44:15.447 回答