пришлось использовать вроде б

Автор admin Среда, 10 июня 2009 11:32

пришлось использовать вроде бы лишний префикс this->. Хотя некоторые компиляторы позволяют обойтись без него, по стандарту С++ он необходим. Обратите внимание: класс PQV является производным от vector, поэтому имена функций begin () и end(), унаследованных от vector, принадлежат к числу зависимых1. Компилятор не может разрешать имена из зависимых базовых классов (в данном случае vector) в определении шаблона, потому что для данной специализации может быть использована переопределенная версия шаблона, которая не содержит соответствующих членов. Специальные правила оформления имен предотвращают ситуацию, при которой в одних случаях вызывается функция базового класса, а в других — функция из внешней области видимости (например, глобальной). Компилятор не знает, что вызов begin() является зависимым, поэтому мы должны сообщить ему об этом при помощи уточнения this->2. Так компилятор узнает, что begin() находится в области видимости PQV, и поэтому нужно ожидать полной специализации PQV. Если бы уточняющий префикс отсутствовал, то компилятор попытался бы использовать для имен begin и end раннее разрешен


Комментарии закрыты.