現在我知道你在想什麼 - 我在標題中描述的事情聽起來就像超載。我知道這不是C中的事情,反正我也不會去做。我有這兩個功能 - 在他們的身體中絕對是一樣的,但參數是兩個不同的結構。基本上它是一個二叉搜索樹結構和一個紅黑樹結構。正如你可能知道的結構只有一個區別 - 紅黑樹結構包含一個字段,這是一個顏色。此外,功能搜索,最小,最大,前任,後繼..那些將有完全相同的身體,但唉,他們採取2種不同類型的結構。當然,插入和刪除方法會有所不同。如何在這種情況下不重複自己? C函數是相同的但具有不同的參數
所以我在想如何避免打破編程中的頭號規則,而不是重複自己?我想到了很多解決方案,但是當我試圖找到實現它的方法時,沒有任何工作。我想過只是使用一個函數,但我不能這樣做,因爲結構是不同的。我想過使用宏,但老實說,我不知道如何使這些工作,我甚至不知道他們可以避免我有兩個不同的結構的問題。我考慮過製作一個泛型結構,並讓rb結構包含它和一個顏色變量,但是這直接改變了代碼中的幾個字符無處不在,因爲我必須更深層次地訪問結構以獲取值並且我不再擁有這些值重複的代碼。
的問題是什麼樣的只是一個例子:
bst_search(bstTree t, char *k)
{
// Searching in tree
}
rb_search(rbTree t, char *k)
{
// SAME code for searching in tree
}
如果我是在Java編碼,我可能會解決這個使用抽象超類,但C沒有這樣花哨的東西。
一些額外的信息:兩個實現都有自己的頭文件和類文件,我想保持這種方式。現在我在這兩個類中重複了代碼,唯一不同的是函數和結構的名稱(除了c的插入和刪除函數)。
對不起,如果這有一個明顯的解決方案,我只是沒有找到一個出路,而不重複我的代碼。
如果您不想通過擁有泛型結構來更改所有其他代碼,請在兩個調用函數(每種類型都使用一個函數)中進行更改。將相關成員複製到您的公共結構中,並調用搜索功能。 –
第一條規則當然不是乾的。我會先把KISS。但是,當然,你會得到一個不同的答案,你要求的每個程序員的第一條規則應該是什麼...... – cmaster