Даже если вы говорите, частичная специализация, это на самом деле явная специализация. Не то чтобы это имеет значение в любом случае, так как явная и частичная специализации являются отдельными типами от базового шаблона.
Чтобы достичь желаемого, нужно ввести другой тип (скорее всего, не шаблон) для работы с совместно используемую функциональность и извлекают ваш базовый шаблон и специализации из этого типа.
struct shared
{
void common_function() { ... }
};
template<unsigned N>
class a : public shared
{ void foo() { std::cout << "a<N>::foo" << std::endl; }
};
template<>
class a<1> : public shared
{
void foo() { .std::cout << "a<1>::foo" << std::endl; }
};