私はオブジェクト指向の機能を C で動作させる必要がある立場にあり、特に継承が必要です。幸いなことに、スタック オーバーフローに関する参考文献がいくつかあります。特に、このSemi-inheritance in C: How does this snippet work? そして、このC のオブジェクト指向。アイデアは、次のように、派生クラス内に基本クラスのインスタンスを含め、それを型キャストすることです。
struct base {
int x;
int y;
};
struct derived {
struct base super;
int z;
};
struct derived d;
d.super.x = 1;
d.super.y = 2;
d.z = 3;
struct base b = (struct base *)&d;
これは素晴らしいことですが、継承ツリーが深いと扱いにくくなります。約 5 ~ 6 個の「クラス」のチェーンが必要になるため、常に「derived.super.super.super.super.super.super」と入力したくはありません。 . 私が望んでいたのは、次のように、最初の n 要素の構造体に型キャストできることでした。
struct base {
int x;
int y;
};
struct derived {
int x;
int y;
int z;
};
struct derived d;
d.x = 1;
d.y = 2;
d.z = 3;
struct base b = (struct base *)&d;
Visual Studio 2012 に付属の C コンパイラでこれをテストしましたが、動作しますが、C 標準が実際にそれを保証しているかどうかはわかりません。これが大丈夫かどうかを確実に知っている人はいますか?そのような基本的なレベルで壊れていることを発見するためだけに、山ほどのコードを書きたくありません。