加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 与模板混合的类成员的继承

发布时间:2020-12-16 09:44:43 所属栏目:百科 来源:网络整理
导读:在下面的代码中,为什么T2给出了这个错误’m_t’没有在这个范围内声明,而TB是好的? 如何在仍然使用模板的情况下访问T2中的T1成员? // All goodclass TA{ public: TA() {} protected: int m_t;};class TB : public TA{ public: TB() {} int get() { return m
在下面的代码中,为什么T2给出了这个错误’m_t’没有在这个范围内声明,而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:
};

解决方法

您需要使用this-> m_t使其成为从属名称.编译模板时,会分两个阶段查找名称.当编译器首先解析模板时,将查找非依赖名称.在实例化模板时查找从属名称.将其更改为this-> m_t会延迟查找,直到实际实例化get函数为止,在这种情况下,基类类型是已知的,编译器可以验证成员的存在.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读