c++ template 항상 헤깔리는 것 같다. 이번에 template화된 base class를 상속하는 class를 작성하게 됐는데 identifier is undefined error 가 발생했다. 이유는 dependent names 관련 문서 정보이다.
dependent name 을 간단히 말하면, 템플릿 파라미터에 영향 받는 이름들이다. 예를 들면,
template <typename T>
class Base{
public:
T dependent;
int nonDependent;
};
위 코드에서 dependent는 dependent name이고 nonDependent는 Non-dependent name이다.
dependent name은 코드가 초기화 되기 전까지 선언과 바인딩 되지 않는다. 간단히 말해 코드를 사용하기 전까지(초기화 되기 전까지) 어떤 타입인지 모른다. 그래서 dependent name에는 명시적으로 scope를 알려줘야 한다.
template <typename T>
class Derived : public Base<T>{
public:
void doSomething(){
cout << dependent << endl;
}
};
위 코드를 에러 없이 실행하려면
this->dependent
또는
Base<T>::dependent
위 처럼 scope를 명확히 해줘야 한다.