Методы наследования частичной специализации класса - PullRequest
2 голосов
/ 16 марта 2020
template <unsigned N>
class A {
    void common_function();
};

template <>
class A<1> {
    void new_functionality();
};

Я хочу, чтобы класс A<1> наследовал common_function() от A класса.

Это было бы полезно, если вам нужно добавить некоторые функциональные возможности в частичную специализацию классов, но не хотите дублировать распространенные методы.

1 Ответ

1 голос
/ 16 марта 2020

Даже если вы говорите, частичная специализация, это на самом деле явная специализация. Не то чтобы это имеет значение в любом случае, так как явная и частичная специализации являются отдельными типами от базового шаблона.

Чтобы достичь желаемого, нужно ввести другой тип (скорее всего, не шаблон) для работы с совместно используемую функциональность и извлекают ваш базовый шаблон и специализации из этого типа.

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; }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...