Re[3]: Специализация метода. Нужно устранить ошибку
От: vopl Россия  
Дата: 24.08.22 10:30
Оценка:
Здравствуйте, σ, Вы писали:

V>>Напрямую — никак. Это будет частичная специализация, язык такое не позволяет.


σ>Как можно понять, что template<typename T> void STest4<T>::foo<TypeH2>() это частичная специализация?


Ну, понять это достаточно просто: если после подстановки аргументов шаблон воплощается в тип/значение — то это полная специализация, а если все еще остается шаблоном — то это частичная. В приведенном куске метод foo принадлежит наблону STest4<T>, то есть сам продолжает быть шаблоном, занчт — частичная специализация. Еще примеры:

template <class T>
struct STest4
{
    template <class X> void foo();
};

// полная
template <> template <> void STest4<int>::foo<int>() {}

// полная
template <> template <> void STest4<int>::foo<char>(){}

// частичная
// template <> template <class X> void STest4<int>::foo<X*>(){}

// частичная
// template <class T> template <> void STest4<T>::foo<int>(){}


Тут более формально описано https://en.cppreference.com/w/cpp/language/partial_specialization. Частичная специализация разрешена только для классовых типов и переменных:

Partial template specialization
Allows customizing class and variable (since C++14) templates for a given category of template arguments.

Отредактировано 24.08.2022 10:31 vopl . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.