Задать вопрос
Qubc
@Qubc
Ненавижу полисемию.

Почему при определении шаблона функции, принадлежащего шаблону класса, не нужно указывать шаблонный тип?

template <typename T>
class A {
    T data;
public:
    template <typename C>
    void func (C c);
};

template <typename T> template <typename C>
void A<T>::func (C c) { // non-type partial specialization 'func<C>' is not allowed, причём здесь частичная специализация?
}

int main() {
    A<int>().func<int>(1);
    A<long>().func<char>('1');
    return 0;
}
  • Вопрос задан
  • 168 просмотров
Подписаться 2 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Разработчик на C++
    12 месяцев
    Далее
  • Академия Эдюсон
    Разработчик игр на Unreal Engine + ИИ
    9 месяцев
    Далее
  • Stepik
    Профессия: Разработчик C++ (Junior)
    2 месяца
    Далее
Пригласить эксперта
Ответы на вопрос 1
@code_panik
// non-type partial specialization 'func' is not allowed

Буквально значит, что язык позволяет определить частичную специализацию только для пользовательского типа. Частичная специализация функции запрещена.
Общий вид частичной специализации можно посмотреть здесь. Видно, что в определениях есть непустые угловые скобки после template и после имени, как и в примере из вопроса.
Значит, скобки после имени функции в определении не нужны, если это не полная специализация. И в полной специализации скобки опускают, если тип выводится из типов аргументов (пример).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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