2013-07-27 88 views
2

我想鍵入一個模板類型並在第二個模板類中使用此類型。如何在模板類中使用C++模板typedef

首先,我定義的一個輔助結構

template<class T> 
struct MyList { 
    typedef std::map<int, T> Type; 
}; 

typedef的,然後把它用在第二個模板:

template <class T> 
    class MySecondClass { 
    public: 
     MySecondClass(MyList<T>& list) : list_(list) {} 
    private: 
     MyList<T>::Type list_; 
    }; 

不幸的是,使用MyListT& list;不工作,並創建一個錯誤。

+0

你可以張貼錯誤? – elyashiv

+0

首先我得到一個警告:c4346從屬名稱不是一個類型,然後錯誤C2146語法。 – user2626195

+0

plz在編譯器/鏈接器生成完整錯誤(行+消息)後發佈它。你應該這樣做的任何問題,你有錯誤/警告 – elyashiv

回答

2

我想這是你想要什麼:

template <typename T> 
class MySecondClass { 
    public: 
     MySecondClass(typename MyList<T>::Type& list) : list_(list) {} 
    private: 
     typename MyList<T>::Type& list_; 
    }; 
+0

太棒了,就是這樣!你能解釋一下,在MyList之前使用單詞typename有什麼不同? – user2626195

+0

http://msdn.microsoft.com/en-us/library/tsx7wabs(v=vs.80).aspx – YK1

1

MyList<T>::TypeMyList<T>不是同一種類型,您正在將它們混合在MySecondClass中。您也可能需要在最後一個聲明上使用typename前綴。

+0

這只是一個錯字,我已經提交給MyList ::類型。問題是一樣的。我只能使用這種類型定義,像MyList int :: Type list_;但那不是我想要的,我想要一個普通的T型。 – user2626195