«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему для вызова шаблона функции-члена из шаблонной функции требуется ключевое слово «шаблон»?

Почему для вызова шаблона функции-члена из шаблонной функции требуется ключевое слово «шаблон»?

Опубликовано 6 ноября 2024 г.
Просматривать:658

Why Does Invoking a Member Function Template from a Templated Function Require the `template` Keyword?

Функция-член вызова шаблонного класса из шаблонной функции

В предоставленном фрагменте кода вызов шаблона функции-члена из другого шаблона приводит к ошибка компиляции. В частности, код пытается вызвать A::f() из g(). Однако это не удается из-за проблемы с синтаксисом.

Чтобы решить эту проблему, ключевое слово шаблона должно быть явно указано перед вызовом функции-члена. Это связано с тем, что в соответствии со стандартом C '03 14.2/4, когда имя специализации шаблона члена появляется после постфиксного выражения или квалифицированного идентификатора, который зависит от параметра шаблона, перед именем шаблона члена должно стоять ключевое слово шаблона. .

Поэтому следующий код является правильным:

template void g()
{
   A a;
   a.template f();  // Explicitly specify 'template' keyword
}

Добавив ключевое слово шаблона, компилятор может правильно определить, что f является шаблоном-членом шаблона класса A, и успешно вызвать A::f().

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3