2011-11-12 100 views
2

我在C中有2個函數做的完全一樣,唯一的區別是傳遞給每個函數的數據類型例如一個是int另一個char *。 有沒有辦法將這些函數合併爲一個,這樣當我調用這個函數時,我不必擔心數據類型。這可以使用模板在C++中完成,但我想在C中做同樣的事情,但不知道如何,thx。C編程模板數據類型

+3

你在做什麼,對於字符串和整數都完全相同? –

+3

也許給我們看代碼吧? – Bart

回答

1

我知道兩種常用的方法來處理這種situtation在C.
1)更換int和 「字符*」,用 「無效* p」 和 「INT大小」

void f1(int i); void f2(char *str); -> void f(void *p, int s); 
f(&i, sizeof(i)); f(str, strlen(str);//or may be f(str, sizeof(str[0]); 

例如看到qsort從STDLIB

2)使用預處理器,就像

#define f(arg) do { \ 
    //magic 
} while (0) 

這樣的東西用於模擬的std ::林列表ux內核。

+0

謝謝,會做 –

0

如果他們是「做同樣的事情」,然後在其中的一個你的參數轉換成另一種類型(char* ==> intint ==> char*)也許。如果是這樣,你可以只做轉換,然後調用其他函數。這樣你就只能擁有大部分的副本。

真的沒有辦法像這樣優雅地「模板」行爲。試圖這樣做,只會讓你的代碼變得難以理解。