구조체의 이름을 인수로 취하는 함수를 만들고 싶다면 메서드 서명은 어떻게 생겼을까요?구조체 이름의 데이터 형식은 무엇입니까
typedef struct Class{
} Class;
main()
{
Class *a = malloc(Class);
return instanceOf(a, Class);
}
instanceOf
의 선언은 어떻게됩니까?
구조체의 이름을 인수로 취하는 함수를 만들고 싶다면 메서드 서명은 어떻게 생겼을까요?구조체 이름의 데이터 형식은 무엇입니까
typedef struct Class{
} Class;
main()
{
Class *a = malloc(Class);
return instanceOf(a, Class);
}
instanceOf
의 선언은 어떻게됩니까?
당신은 당신이 매크로를 사용하여이 동작을 시뮬레이션 할 수 있습니다, 그러나 C.에서 기능 유형을 전달할 수 없습니다 :
#define new_instance(t) (malloc(sizeof(t)))
Class *instance = new_instance(Class);
에서조차와 그 타입 캐스트? 나는 무언가 포인터를 던지기에 대한 [여기] (http://www.planetpdf.com/codecuts/pdfs/ooc.pdf)를 읽었다. 컴파일러는 항상 에러를 내거나 식별자 "Class"가 어딘가에 포인터에 캐스팅 될 수 있습니까? –
아니요, 형식에 인수를 전달할 수 없습니다. –
@DavidNathan이 문서에서 설명한 접근법은 유형/구조체 이름을 값으로 전달하지 않습니다. 클래스를 나타내는 값 (구조체 유형의 값)을 생성하고 클래스를 전달합니다. H2CO3이 말했듯이, 타입을 함수 인자로 전달할 수 없으며 (또는 변수를 변수에 저장하거나 값이 사용되는 다른 모든 컨텍스트에서 사용할 수 없습니다.) – sepp2k
#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;
}
나는 당신이 할 수 있다고 생각하지 않습니다 C. –