[問題] 用 C 模擬繼承

看板C_and_CPP作者 (好人超)時間15年前 (2010/01/04 16:59), 編輯推噓3(307)
留言10則, 6人參與, 最新討論串1/1
雖然標題說繼承,不過我想做的事情是這樣的: 把兩個 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

01/05 01:15, , 1F
其實不用s.base.a 你可以把他cast成為base(super)後直接用a
01/05 01:15, 1F

01/05 01:16, , 2F
加上 getter 和 setter 函式?
01/05 01:16, 2F

01/05 01:19, , 3F
用巨集跟指標 (推文時間200秒@_@?)
01/05 01:19, 3F

01/05 01:24, , 4F
對阿,我上一篇也是推一行之後只好回文章XD
01/05 01:24, 4F

01/05 01:24, , 5F
base { // 跟T3 c; // 倒是可以 (逃..)
01/05 01:24, 5F

01/05 10:03, , 6F
滿有趣的問題 我也想知道
01/05 10:03, 6F

01/06 13:38, , 7F
struct s1 : public s { .... }
01/06 13:38, 7F

01/06 13:40, , 8F
struct s1 : public base <~ s1 繼承 base 就好了..
01/06 13:40, 8F

01/06 14:58, , 9F
傳統的C語言不能這麼用啦 XD
01/06 14:58, 9F

01/06 15:32, , 10F
XD, 沒看到是用C語言...
01/06 15:32, 10F
文章代碼(AID): #1BGXw4EX (C_and_CPP)