2012-06-10 68 views
1

我的目標是創建一個帶有不同類型節點的鏈表。對於這一點,我創建了一個節點類模板如下:我可以在類模板的方法內引用另一個模板類型的對象嗎?

template <class T> 
class N_Node 
{ 
public: 
    N_Node(T e, N_Node *p = nullptr ,N_Node *n = nullptr); 
    void set_previous(N_Node<T> *p); 
    void set_next(N_Node<T> *n); 
    N_Node get_previous(); 
    N_Node get_next(); 

    T element; 
    N_Node *prev; 
    N_Node *next; 
}; 

現在,在main.cpp中,當我試圖做到以下幾點,它給了我一個錯誤說N_Node<int>*類型的參數與參數不符鍵入N_Node<char>*。所以,我想知道是否有任何方法可以指定設置爲前一個的節點可以是與當前節點不同的類型?

N_Node<int> n1(5); 
N_Node<char> n3('g'); 
n3.set_previous(&n1); 
+0

請修復格式。 –

+0

抱歉,哪部分需要修復? – nave

+0

@nave查看當前版本(特別是Griwes的更改)並將其與原始版本進行比較。要比較版本,您可以點擊帖子下方的「編輯過的X秒/分鐘前」鏈接,將其保留在用戶名旁邊。 –

回答

1

當然,創建一個類N_Node_Base省略了element成員,並從它繼承N_Node<T>。大多數C++標準庫實現都是這樣做的,以減少模板開銷。

當然,通過這樣做,您將失去遍歷列表和訪問元素的能力,因爲您不知道每個元素的類型。您可能想要使用例如鍵盤擦除T的最小界面。 boost::any,但你必須多說一些你爲什麼要這樣做。

+0

,目標是創建動態調整大小的異構列表。 – nave

+0

在託管/腳本語言中使用異構列表是有意義的,其中所有東西都是對象(或可以裝入對象中)。在C++中,沒有一個單一的基礎'對象'類型(儘管大量的框架提供了一個),類似的拳擊。你需要考慮你想要*做的事情*列表中的元素。 – ecatmur

+0

感謝您的建議。 – nave

相關問題