Задать вопрос
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;
}
  • Вопрос задан
  • 132 просмотра
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@code_panik
// non-type partial specialization 'func' is not allowed

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

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

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