Задать вопрос
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;
}
  • Вопрос задан
  • 148 просмотров
Подписаться 2 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Разработчик C++
    9 месяцев
    Далее
  • Skillbox
    Разработчик на C++
    7 месяцев
    Далее
  • Нетология
    Разработчик на C++: Профессия + специализация + нейросети
    12 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
@code_panik
// non-type partial specialization 'func' is not allowed

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

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

Похожие вопросы
Горбилет Санкт-Петербург
от 200 000 ₽
Горбилет Санкт-Петербург
от 200 000 до 250 000 ₽
Горбилет Санкт-Петербург
от 150 000 ₽