亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 4500 | 回復: 17
打印 上一主題 下一主題

[C] 帶條件的強制類型轉(zhuǎn)換如何寫? [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2010-06-09 15:41 |只看該作者 |倒序瀏覽
本帖最后由 newbuding 于 2010-06-10 15:41 編輯

有3個結(jié)構(gòu)體,中有小部分成員相同
結(jié)構(gòu)體a與結(jié)構(gòu)體b為實類,結(jié)構(gòu)體c為共同類,可以替代a或b。
當然結(jié)構(gòu)體a和b不會像下面這么簡單。
  1. struct a {
  2.   int type;
  3.   int count;
  4. };

  5. struct b {
  6.   int type;
  7.   int count;
  8. };

  9. struct c {
  10.   int type;
  11.   char data[max(sizeof(struct a),sizeof(struct b))-sizeof(int)];
  12. };
復制代碼
能否實現(xiàn)宏ZZ(),或者函數(shù)ZZ()

  1. struct a test_a = { 1, 100};
  2. struct b test_b = { 2, 200};
  3. struct c test_c = (struct a)test_a;
  4. printf("%d\n", ZZ(test_c).count++);
復制代碼
可以實現(xiàn):根據(jù)type的不同,處理成不同的結(jié)構(gòu)體。

論壇徽章:
0
2 [報告]
發(fā)表于 2010-06-09 16:22 |只看該作者
本帖最后由 newbuding 于 2010-06-10 15:41 編輯

關(guān)鍵就是最后一句

  1. printf("%d\n", ZZ(test_c).count++);
復制代碼
要ZZ返回的是變量,而不是值,如何搞。

論壇徽章:
0
3 [報告]
發(fā)表于 2010-06-09 18:44 |只看該作者
為啥要用結(jié)構(gòu)而不用聯(lián)合?

論壇徽章:
2
摩羯座
日期:2013-10-10 14:29:04天蝎座
日期:2014-01-03 09:14:49
4 [報告]
發(fā)表于 2010-06-09 20:52 |只看該作者
#define ZZ(x)   (&x)

論壇徽章:
0
5 [報告]
發(fā)表于 2010-06-09 20:59 |只看該作者
如4L,傳地址然后判斷type進行處理

論壇徽章:
0
6 [報告]
發(fā)表于 2010-06-10 00:11 |只看該作者
如4L,傳地址然后判斷type進行處理
bill15 發(fā)表于 2010-06-09 20:59



    關(guān)鍵的就是如何判斷type,并繼續(xù)處理?
而且處理后仍為變量,而不是值,允許對變量做進一步操作

論壇徽章:
0
7 [報告]
發(fā)表于 2010-06-10 00:15 |只看該作者
為啥要用結(jié)構(gòu)而不用聯(lián)合?
沒本 發(fā)表于 2010-06-09 18:44



不用聯(lián)合是因為:
我只知道剩余變量所占的大小,而不一定知道變量的名字

論壇徽章:
0
8 [報告]
發(fā)表于 2010-06-10 00:27 |只看該作者
這個數(shù)據(jù)結(jié)構(gòu)的抽象是有問題的,count既然不是共有的屬性,為啥要通過struct c來改變

論壇徽章:
0
9 [報告]
發(fā)表于 2010-06-10 10:31 |只看該作者
這個數(shù)據(jù)結(jié)構(gòu)的抽象是有問題的,count既然不是共有的屬性,為啥要通過struct c來改變
ehust_cu 發(fā)表于 2010-06-10 00:27


為什么說不是共有的屬性呢?
結(jié)構(gòu)體a和b都有count啊,只不過現(xiàn)實中可能count的類型不一樣。
例如count有可能是int型的,還有可能是個double型的,或者是個struct。

論壇徽章:
0
10 [報告]
發(fā)表于 2010-06-10 12:22 |只看該作者
介紹一下其他的設計方案。
C的話有 VARIANT ,微軟用于OLE/ActiveX
C++的話,Boost.Any和Boost.Variant
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP