클래스의 멤버 유형을 나타 내기 위해 다른 곳에서 사용할 수있는 템플릿 클래스에 유형 이름을 정의하고 싶습니다.템플릿 내 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;
가능이 아닌가?
typedef typename T ElementType1;
은 분명히 컴파일러는 유형 이름 후 자격을 갖춘 이름을 기대하지만 난 템플릿 유형의 하나가 될 수있는 방법이 표시되지 않습니다 : 내가하지 라인을 사용 엑스 코드에서 제대로 VS2010에서하지만 컴파일 일부 코드가 .
이 컨텍스트에서 ElementType1과 ElementType2의 차이점을 이해하지 못합니다.
스택 오버플로에 대한 많은 질문을 보았지만 필자의 예제에서는 iterator_type과 같은 종류의 선언 만 언급 한 것 같습니다.
제 질문에 대한 답변이 좋았으므로 'typedef T ElementType'을 사용해야합니다. 정말로 typename이 있어야하는지 잘 모르겠다. 나는 CBase'에서 그것의 사용법을 이해한다. 여기에 유형 이름 [link] (http://pages.cs.wisc.edu/~driscoll/typename.html)에 대한 자세한 정보가 있습니다. VS2010하지만 ElementType1 선언을 받아들이 듯하지만 gcc가 아닌 것 같습니다. –
Robotbugs