импортировать все переменные родительского класса - PullRequest
4 голосов
/ 23 марта 2009

Возможно, вы заметили, что более поздние версии gcc более строгие в отношении стандартов ( см. Этот вопрос )

Все унаследованные члены шаблонного класса должны вызываться с использованием полного имени, т.е. ParentClass<T>::member вместо member

Но все же у меня есть много старого кода, который не уважает это. Добавление using ParentClass<T>::member для каждого используемого члена в каждом классе - довольно трудная задача. Есть ли способ сделать что-то вроде using ParentClass<T>::*? Я хотел бы это лучше, чем отключить эту проверку в g ++, но если есть способ, как я могу деактивировать его?

Редактировать

Согласно C ++ FAQ (спасибо sth), это единственный способ правильно решить унаследованные имена переменных-членов:

  1. Измените вызов с f() на this->f(). Поскольку это всегда неявно зависит в шаблоне, this->f является зависимым, и поэтому поиск откладывается до фактического создания шаблона, после чего рассматриваются все базовые классы.

  2. Вставка using B<T>::f; незадолго до звонка f().

  3. Измените вызов с f () на B<T>::f().

Итак, теперь ищем правильный переключатель, чтобы деактивировать полное разрешение имен ...

1 Ответ

6 голосов
/ 23 марта 2009

Не совсем ответ на ваш вопрос, но вы также можете написать this->member вместо ParentClass<T>::member. Это чаще всего легче написать и заставляет компилятор искать member в нужных местах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...