는 코드는 아래와 같은 오류를 산출 Ideone 또는 Codepad에 컴파일되지 않습니다 :VC++ 2010 비표준 종속 기본 클래스에서이 이름 조회입니까?
'X' was not declared in this scope
하지만 VC++ 2010을 수행합니다
이int
,
char
및
float
을 인쇄
#include <iostream>
#include <typeinfo>
template<typename T>
struct Base
{
typedef T X;
};
template<typename T>
struct Derived
:
Base<T>
{
static void print()
{
std::cout << typeid(X).name() << "\n";
}
};
int main()
{
Derived<int>::print();
Derived<char>::print();
Derived<float>::print();
return 0;
}
. 내 코드를 다음과 같이 변경해야합니까? 012-
두 번째 예제에서 상속을 취소 하시겠습니까? – juanchopanza
@juanchopanza 그렇습니다. 예를 들어'Base '가 더 많은 템플릿 매개 변수에 의존하는 실제 프로젝트의 예제 였기 때문에 그걸 삭제하려고했기 때문에 내부 typedef가 코드를 좀 더 읽기 쉽게 만듭니다. 가독성은 실제로 MSVC++에서 상속을 시도한 이유 였지만 g ++에서는 실패했습니다. – TemplateRex
[이 질문과] 같은 대답 (http://stackoverflow.com/questions/7908248/using-this-keyword-in-destructor). – curiousguy