2014-01-06 84 views
1

我已經實現了一個紅黑樹,它工作正常。但是,我需要通過在C++中使用模板(泛型)將它與任何數據類型一起使用。 當添加項目到樹,這兩個鍵和項目本身應該是通用的類型(C++模板)C++模板(插入方法)

代碼:

RB_Node* RedBTree::RBTInsert(void* key, void* item) 
{ 
    RB_Node* y; 
    RB_Node* x; 
    RB_Node* newNode; 
    //rest of algorithm 
} 

你怎麼做的2個參數作爲通用?我是新來的C++和模板本身,任何幫助真的很感謝

+2

您可能希望使用'key'和'mapped_type'作爲參數來使該類成爲類模板。請參閱'std :: map'獲取靈感。 – juanchopanza

回答

2

你會開始你的申報與template,其次是一套合適的模板參數,取代你void*的結果名稱,並假裝模板參數只是碰巧是正常的類型。只要你不需要任何關聯的類型和你的代碼只需要爲定期類型參數的工作,你會被罰款:

template <typename Key, typename Value> 
RB_Node* RedBTree<Key, Value>::RBInsert(Key const& key, Value const& item) 
{ 
    // pretty much like before... 
} 

當我開始使用模板工作我第一次執行代碼才能使用具體類型,確保它的工作,然後用模板參數替換具體類型。過了一段時間(我覺得有點不到5年),我首先跳過用具體類型寫東西。事實證明,一旦你瞭解了模板的內容,用概念來寫就比使用具體類型更容易。