结构名称的数据类型是什么

时间:2012-05-13 11:26:18

标签: c oop types struct instanceof

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

typedef struct Class{
} Class;

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

instanceOf的声明会是什么样的?

2 个答案:

答案 0 :(得分:7)

您无法将类型传递给C中的函数。但是,您可以使用宏来模拟此行为:

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

Class *instance = new_instance(Class);

答案 1 :(得分: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;
}