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 に答える