use*_*453 3 c++ inheritance templates member
在下面的代码中,为什么T2会出现此错误‘m_t’ was not declared in this scope,而TB是正常的?
如何在仍然使用模板的情况下访问T2中的T1成员?
// All good
class TA
{
public:
TA() {}
protected:
int m_t;
};
class TB : public TA
{
public:
TB() {}
int get()
{ return m_t; }
protected:
};
// Error in T2
template<typename T>
class T1
{
public:
T1() {}
protected:
int m_t;
};
template<typename T>
class T2 : public T1<T>
{
public:
T2() {}
int get()
{ return m_t; }
protected:
};
Run Code Online (Sandbox Code Playgroud)
您需要使用this->m_t它来使其成为从属名称.编译模板时,会分两个阶段查找名称.当编译器首先解析模板时,将查找非依赖名称.在实例化模板时查找从属名称.将其更改为this->m_t延迟查找,直到get实际实例化函数之后,在这种情况下,基类类型是已知的,编译器可以验证成员的存在.