作者james732 (好人超)
站內C_and_CPP
標題[問題] 用 C 模擬繼承
時間Tue Jan 5 00:59:45 2010
雖然標題說繼承,不過我想做的事情是這樣的:
把兩個 struct 共同的欄位抽取出來,再各自加上自己獨有的欄位
假設我有這樣的兩個大同小異的 struct (Tn 代表是某種 Type)
struct s1 { struct s2 {
T1 a; T1 a;
T2 b; T2 b;
T3 c; T3 c;
T4 z; T5 y;
}; };
這樣的話我該怎麼讓它們的宣告化簡呢?
如果我這麼寫:
struct base { struct s1 { struct s2 {
T1 a; struct base base; struct base base;
T2 b; T4 z; T5 y;
T3 c; }; };
};
雖然可以成功抽取共同的部份,但是使用卻變得有所不便:
struct s1 s;
s.base.a = N; // 如果我要對 a 賦值,還要多插一個 base
有沒有辦法能讓我兼顧「不要重覆宣告」與「不影響取值方式」呢?
使用平台:Linux GCC
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.173.133.199
推 sunneo:其實不用s.base.a 你可以把他cast成為base(super)後直接用a 01/05 01:15
推 freesamael:加上 getter 和 setter 函式? 01/05 01:16
→ sunneo:用巨集跟指標 (推文時間200秒@_@?) 01/05 01:19
→ freesamael:對阿,我上一篇也是推一行之後只好回文章XD 01/05 01:24
推 buganini:base { // 跟T3 c; // 倒是可以 (逃..) 01/05 01:24
→ jpeanut:滿有趣的問題 我也想知道 01/05 10:03
→ gohomexx:struct s1 : public s { .... } 01/06 13:38
→ gohomexx:struct s1 : public base <~ s1 繼承 base 就好了.. 01/06 13:40
→ james732:傳統的C語言不能這麼用啦 XD 01/06 14:58
→ gohomexx:XD, 沒看到是用C語言... 01/06 15:32