Это удивительно легко, когда вы освоите его
template<typename T, int X>
class foo
{
private:
template<typename, int> class params { };
public:
void set(const T &t) {
set(t, params<T, X>());
}
private:
template<typename T1, int X1>
void set(const T1 &t, params<T1, X1>) {
// ...
}
template<int X1>
void set(const bar &t, params<bar, X1>) {
// ...
}
};
Это необходимо, потому что, если вы явно специализируете один элемент, вы должны предоставить все аргументы шаблона.Вы не можете оставить немного.