You can fully customize an element:
template<int N>
struct Vector {
int calculate() { return N; }
};
template<>
int Vector<3>::calculate() { return -1; }
You are fully specialized. This means that you cannot specialize it privately:
template<int N, int P>
struct Vector {
int calculate() { return N; }
};
template<int N>
int Vector<N, 3>::calculate() { return -1; }
If you need it, you can use enable_if:
template<int N, int P>
struct Vector {
int calculate() { return calculate<P>(); }
private:
template<int P1>
typename enable_if_c<P1 == P && P1 == 3, int>::type
calculate() { return -1; }
template<int P1>
typename enable_if_c<!(P1 == P && P1 == 3), int>::type
calculate() { return N; }
};
, ( ), .
. , .