Сообщение Re[3]: Специализация метода. Нужно устранить ошибку от 24.08.2022 10:30
Изменено 24.08.2022 10:31 vopl
Re[3]: Специализация метода. Нужно устранить ошибку
Здравствуйте, σ, Вы писали:
V>>Напрямую — никак. Это будет частичная специализация, язык такое не позволяет.
σ>Как можно понять, что template<typename T> void STest4<T>::foo<TypeH2>() это частичная специализация?
Ну, понять это достаточно просто: если после подстановки аргументов шаблон воплощается в тип/значение — то это полная специализация, а если все еще остается шаблоном — то это частичная. В приведенном куске метод foo принадлежит наблону STest4<T>, то есть сам продолжает быть шаблоном, занчт — частичная специализация. Еще примеры:
Тут более формально описано https://en.cppreference.com/w/cpp/language/partial_specialization. Xастичная специализация разрешена только для классовых типов и переменных:
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. Xастичная специализация разрешена только для классовых типов и переменных:
Partial template specialization
Allows customizing class and variable (since C++14) templates for a given category of template arguments.
Re[3]: Специализация метода. Нужно устранить ошибку
Здравствуйте, σ, Вы писали:
V>>Напрямую — никак. Это будет частичная специализация, язык такое не позволяет.
σ>Как можно понять, что template<typename T> void STest4<T>::foo<TypeH2>() это частичная специализация?
Ну, понять это достаточно просто: если после подстановки аргументов шаблон воплощается в тип/значение — то это полная специализация, а если все еще остается шаблоном — то это частичная. В приведенном куске метод foo принадлежит наблону STest4<T>, то есть сам продолжает быть шаблоном, занчт — частичная специализация. Еще примеры:
Тут более формально описано https://en.cppreference.com/w/cpp/language/partial_specialization. Частичная специализация разрешена только для классовых типов и переменных:
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.