我想在模板類中定義一個類型名稱,我可以在其他地方使用它來引用類中成員的類型。在模板中使用typedef和typename
template <class T>
class CA
{
public:
//typedef typename T::iterator iterator_type;
typedef typename T ElementType1; // compile error on this line
//typedef T ElementType2;
T m_element;
};
,並使用它像這樣:
template <class T>
class CDerived : public CBase<typename T::ElementType1>
{
//...
};
,並宣佈對象,如:
typedef CDerived<CA> MyNewClass;
這是不可能的?我有一些代碼,編譯正確下VS2010而不是下使用該行的Xcode:
typedef typename T ElementType1;
顯然編譯器期待類型名稱後,一個合格的名字,但我不明白如何可以有一個模板類型。
我不明白在這種情況下ElementType1和ElementType2之間的區別。
我看了很多關於堆棧溢出的問題,但大多數似乎只涉及像我的例子中的iterator_type這樣的聲明。
確定很酷,回答我的問題,我需要使用'typedef T ElementType'。真的,我不確定typename是否應該在那裏。我明白它在'CBase'中的用法。這是關於類型名稱[鏈接](http://pages.cs.wisc.edu/~driscoll/typename.html)的更多信息。似乎VS2010接受ElementType1聲明,但是,也許不是gcc。 –
Robotbugs