C言語におけるインクルージョン多相の構造体ポインタによる実現
code: example.c
struct animal {
const char* scientific_name;
}
void print_animal_scientific_name((struct animal *) this) {
printf("%d\n", this->scientific_name);
}
struct human {
struct animal kind;
const char* language;
}
int main() {
struct human me;
me.language = "Japanese";
me.kind.scientific_name = "Homo sapiens";
print_animal_scientific_name((struct animal *)me);
}
これで、形の上では、print_animal_scientific_nameにanimalのポインタを渡したいとき、animalの派生型humanも渡せるようになった。
この方法は、例えばhumanがanimalを第1メンバとして記述している場合にしか使えない。
メンバの順番を入れ替えた瞬間に破綻するだろう
メンテナンスに問題があると思うt6o_o6t.icon