为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我必须通过this指针访问模板基类成员?

为什么我必须通过this指针访问模板基类成员?

C++ C
烙印99 2019-05-29 17:15:44
为什么我必须通过this指针访问模板基类成员?如果下面的类不是模板,我可以x在derived课堂上使用。但是,使用下面的代码,我必须使用this->x。为什么?template <typename T>class base {protected:     int x;};template <typename T>class derived : public base<T> {public:     int f() { return this->x; }};int main() {     derived<int> d;     d.f();     return 0;}
查看完整描述

3 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

我想我找到了答案:GCC问题:使用依赖于模板参数的基类成员。答案并非针对gcc。


更新:回应mmichael的评论,来自C ++ 11标准的N3337草案

14.6.2从属名称[temp.dep]
[...] 
3在类或类模板的定义中,如果基类依赖于模板参数,则在非限定名称查找期间不会检查基类范围类模板或成员的定义点,或者在类模板或成员的实例化过程中。

无论是“因为标准是这样说的”算作一个答案,我不知道。我们现在可以问为什么标准要求,但正如Steve Jessop的优秀答案和其他人所指出的那样,后一个问题的答案相当长且可论证。不幸的是,当涉及到C ++标准时,通常几乎不可能给出标准强制要求的简短而自成一体的解释; 这也适用于后一个问题。


查看完整回答
反对 回复 2019-05-29
?
慕虎7371278

TA贡献1802条经验 获得超4个赞

x继承过程中被隐藏。你可以通过以下方式取消隐藏:

template <typename T>class derived : public base<T> {public:
    using base<T>::x;             // added "using" statement
    int f() { return x; }};


查看完整回答
反对 回复 2019-05-29
  • 3 回答
  • 0 关注
  • 737 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信