Информация об изменениях

Сообщение Re: Специализация шаблонной функции шаблонного класса, подск от 11.07.2019 9:40

Изменено 11.07.2019 11:48 rg45

Re: Специализация шаблонной функции шаблонного класса, подск
Здравствуйте, Marty, Вы писали:

M>Есть шаблонный класс с шаблонными функциями. Хочу специализировать функции по их шаблонному аргументу, но чтобы они остались шаблонными по параметру шаблона класса.

M>И сам делал такое, но довольно нечасто и давно, и совсем позабыл, что к чему.

Вероятно, ты делал специализацию для шаблонных функций НЕшаблонного класса. А то, что ты хочешь — это не что иное, как частичная специализация шаблонных функций(членов), которая никогда не поддерживалась раньше, не поддерживается и сейчас. Типовое решение — реализация шаблонной функции через шаблонный класс. И тогда частичная специализация делается уже для класса, а не для функции: https://ideone.com/FNbuG3

Другой способ — добавление к списку формальных параметров функции фейкового параметра, производного от типа, по которому требуется сделать специализацию. В таком случае набор специализаций заменяется равноценным набором перегрузок: https://ideone.com/CRgCQU.
Re: Специализация шаблонной функции шаблонного класса, подск
Здравствуйте, Marty, Вы писали:

M>Есть шаблонный класс с шаблонными функциями. Хочу специализировать функции по их шаблонному аргументу, но чтобы они остались шаблонными по параметру шаблона класса.

M>И сам делал такое, но довольно нечасто и давно, и совсем позабыл, что к чему.

Вероятно, ты делал специализацию для шаблонных функций НЕшаблонного класса. А то, что ты хочешь — это не что иное, как частичная специализация шаблонных функций(членов), которая никогда не поддерживалась раньше, не поддерживается и сейчас. Типовое решение — реализация шаблонной функции через шаблонный класс. И тогда частичная специализация делается уже для класса, а не для функции: https://ideone.com/FNbuG3

Другой способ — замена специализаций на перегрузки. В тех случаях, когда параметр шаблона не связан с формальными параметрами функции и/или не выводится из них автоматически, к списку формальных параметров функции просто добавляется фейковый параметр, производный от типа, по которому требуется сделать специализацию: https://ideone.com/CRgCQU.