Доступ к наследованной переменной от шаблонного родительского класса [дубликат]

выбрать пакет будет реорганизован, refactor-> move -> "переместить xxx в новый пакет"

28
задан 3 March 2009 в 08:03
поделиться

1 ответ

Позже версии GCC правильно реализуют стандарт.

стандарт определяет, что дисквалифицированные имена в шаблоне независимы и должны искаться, когда шаблон определяется. Определение зависимого базового класса неизвестно в то время (специализации шаблона базового класса могут существовать), таким образом, дисквалифицированные имена неспособны быть разрешенными.

Это верно и для имен переменной и для имен функций, объявленных в базовом классе.

, Как Вы заметили, решение состоит в том, чтобы обеспечить полностью определенное имя переменной или функции, или обеспечить объявление "использования". Например,

template<class T> 
int Bar<T>::Perna(int u) 
{ 
  int c = Foo<T>::a * 4; // This works
  c = this->a * 4; // and this

  using Foo<T>::a; 
  c = a * 4; // and with 'using', so should this
}

(я на самом деле не на 100% уверен в правильном синтаксисе для версии использования и не могу протестировать отсюда, но Вы получаете идею).

38
ответ дан Andrew Grant 14 October 2019 в 11:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: