構造体の名前を引数とする関数を作成したい場合、メソッドの署名はどのように見えますか?構造体の名前のデータ型は何か
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);
でそれを行うことができるとは思いませんタイプキャスト?私はそれらをvoidポインタにキャストすることについて[ここ](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. –