ADT物件抽象可以有兩種底層實現方法,一是typedef,二是#define。兩者各有優缺點,typedef的內聚性比#define明顯更好,但由于typedef定義的別名無法更改,因此不適于同一編譯單元需要多于一種物件抽象的情況,此時可以改用#define,因為可以通過#undef去掉先前定義的宏名,再重新定義。
對于void*,并不是適合于任何場合的,不應一股腦兒都使用void*,特別對于樓主所舉的例子,void*是不適合作為Item的替代物的,因為這里的Item都屬于同一類型,沒有必要再多一層間接性。如果所抽象的物件具有不同的類型,就可以考慮void*。
把typedef的用法稱為“通用性”并不精確,所謂“通用性”其實不過是一件副產品。C的ADT目的是為了實現代碼復用,體現的是原始的封裝和接口與實現分離,各種“物件”是其操作對象,不同情況下物件的構成當然會有所不同,typedef的類型定義就是各種物件的不同抽象。
下一篇cs加速器怎么開