我有一個動態數組ADT其元素類型爲void *如何在同一程序中重複使用具有不同typedef的同一段C代碼?
// In dyn_array.h
typedef void* element;
void append(array *a, element e);
inline void set(array *a, int i, element e);
...
// dyn_array.c contains the implementation
並且這在我的程序的許多地方使用。當我將新功能添加到程序中時,現在我需要一個具有int元素而不是void *的動態數組。我知道其中一個解決方案可能是製作dyn_arrayi.h和dyn_arrayi.c,其內容幾乎與dyn_array.h和dyn_array.c相同,除了typedef語句和函數的名稱。但對我來說,這似乎並不是一個優雅的解決方案,因爲我顯然無意義地重複着自己。
有沒有更好的解決方案,以便我不需要重複自己?也許編譯不同版本的目標代碼?你會如何做到這一點?謝謝。
元素是void *現在如果你有整數,並且想要使用相同的函數,你可以傳遞整數來代替void *。 –
我建議你閱讀這篇文章:http://stackoverflow.com/questions/11164621/templating-in-c-using-the-preprocessor –
@Dayalrai不幸的是,在我真正的代碼中,我實際上是想存儲一個結構。感謝提到這一點;-) –