Использование указателя this в шаблоне зависимого производного класса

В примере pointers/countingptr.hpp из книги Шаблоны C++ — Полное руководство к элементам производного зависимого class CountingPtr обращаются с помощью указателя this. Почему this необходимо в этом примере?

Я знаю, что указатель this необходим для именования членов шаблона зависимого базового класса. Конечно, указатель this не требуется и в шаблоне зависимого производного класса?


person Olumide    schedule 19.07.2012    source источник
comment
Вы пробовали оставить это?   -  person Kerrek SB    schedule 19.07.2012
comment
Нет. Я изучаю текст и предположил, что он там по причине, которую (пока) не понимаю.   -  person Olumide    schedule 19.07.2012


Ответы (3)


Я считаю, что это просто стиль парня, который делал этот код. Некоторые люди предпочитают ставить this-> перед всем, что связано с классом внутри этого класса. Это действительно может иногда быть полезным, если вы делаете такие забавные вещи, как:

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

или если вы просто думаете, что это увеличивает читабельность. Однако, если вы используете его слишком часто, это будет беспорядок:

this->a = this->b * this->c - this->foo( this->d, this->bar() );
person SingerOfTheFall    schedule 19.07.2012

Это не нужно. Некоторые люди используют this везде.

person David Hammen    schedule 19.07.2012
comment
Странный. Впервые в книге авторы решили быть this явными. Игра слов. - person Olumide; 19.07.2012
comment
Если вы всегда используете this, вы не забудете его для зависимых базовых членов. - person curiousguy; 22.07.2012

не требуется в зависимом производном классе

В чем?

Не существует «зависимого производного класса». Производный класс является производным классом.

производный класс шаблон

Это шаблон класса, но он анализируется как класс.

Подумайте об этом так:

Это не шаблон класса, а просто класс (тип). Специализация шаблона класса, но все же класс, как обычный класс.

Или так:

Шаблон производного класса создается с аргументом «магический ленивый тип». Этот аргумент ленивого типа приостанавливает компиляцию любого выражения, которое от него зависит.

person curiousguy    schedule 21.07.2012