【问题标题】:Using the this pointer in a dependent derived class template在依赖派生类模板中使用 this 指针
【发布时间】:2012-07-19 12:35:08
【问题描述】:

在本书C++ Templates - The Complete Guide 的示例pointers/countingptr.hpp 中,派生依赖class CountingPtr 的成员使用this 指针来引用。为什么在这个例子中需要this

我知道this 指针是必需的,以便命名依赖基类模板的成员。在依赖派生类模板中肯定也不需要this 指针吗?

【问题讨论】:

  • 您是否尝试过忽略它?
  • 没有。我正在研究文本,我认为它在那里是出于我(还)不理解的原因。

标签: c++ templates inheritance this name-lookup


【解决方案1】:

我相信这只是编写此代码的人的一种风格。有些人喜欢将this-> 放在与该类中的类相关的任何内容之前。如果您正在做一些有趣的事情,这确实可能有时很有用:

void foo( int a )
{
this->a = a;
}

或者,如果您只是认为这会增加可读性。 但是,如果你用得太多,就会变得一团糟:

this->a = this->b * this->c - this->foo( this->d, this->bar() );

【讨论】:

    【解决方案2】:

    不需要。有些人到处使用this

    【讨论】:

    • 奇怪。这是本书作者第一次决定使用this 显式。双关语。
    • 如果你总是使用this,那么你就不会忘记它的依赖基成员。
    【解决方案3】:

    依赖派生类中不需要

    在什么方面?

    没有“依赖派生类”。派生类就是派生类。

    派生类模板

    它是一个类模板,但是它被解析为一个类

    这样想:

    它不是类模板,只是一个类(一种类型)。一个类模板特化,但仍然是一个类,就像一个普通类。

    或者这样:

    派生类模板使用“神奇的惰性类型”参数进行实例化。这个惰性类型参数暂停任何依赖它的表达式的编译。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多