Почему нельзя комбинировать списки параметров шаблона для шаблона и его члена? - PullRequest
0 голосов
/ 03 сентября 2018

Я читаю "Язык программирования C ++ по Страуструпу", и это упоминается как

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

А пример приведен ниже.

template<class T>
  template<class T2> Ptr<T>::operator Ptr<T2> () { return Ptr<T2>(p); }

template<class T, class T2> // error
  Ptr<T>::operator Ptr<T2> () { return Ptr<T2>(p); }

Я не понимаю, почему это не разрешено, может кто-нибудь объяснить, почему это не так?

1 Ответ

0 голосов
/ 03 сентября 2018

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

Я думаю, что это совершенно логично. Если бы это было сделано так, как вы предлагаете, программист, читающий ваш код, вероятно, подумал бы, что существует один шаблонный класс с двумя параметрами, и он ошибся.

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