Частичная специализация хороша (как уже упоминалось другими), но вы должны реализовать все члены из исходного класса B
.Другой подход заключается в извлечении k
из A
с использованием внешнего инструмента (A_traits
в этом примере).
template <typename>
struct A_traits;
template <int K>
struct A_traits<A<K>> : std::integral_constant<int, K> {};
Ваша реализация практически не изменилась, просто используйте A_traits
для извлечения k
.
template <typename T>
void B<T>::bar() {
printf("Templated bar() for k=%d\n", A_traits<T>::value);
}