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